解决使用 OOP 时的过程混乱
Resolving procedure confusion when using OOP
我正在用 Fortran 编写矢量类型,我感到很困惑。
假设我有以下派生类型
Type (Vector)
Real :: x, y
Contains
Procedure :: vector_smul
End Type
Function vector_smul &
( &
va, vb &
) &
Result (c)
Real :: c
Class (Vector), Intent (In) :: va, vb
c = (va%x + vb%x) + (va%y * vb%y)
End Function vector_smul
但是当我使用
Type (Vectors)
Real :: x, y
Contains
Procedure :: smul => vector_smul
End Type
我在使用时遇到错误
Program Test
Use Vector
Implicit None
Real :: c
Type (Vector) :: va, vb
c = smul (va, vb)
End Program
您只是在定义一个指向 vector_smul
的类型绑定过程 xyz%smul
!原模块程序vector_smul
不受影响!
为了保留 Fortran 标准(2008,第 4.5.5 章)的术语,smul
是 绑定名称 过程名称 vector_smul
。您仍然可以访问过程本身。
在主程序中使用时可以"rename"函数:
Program Test
Use Vector, only: Vector, smul => vector_smul
Implicit None
Real :: c
Type (Vector) :: va, vb
c = smul (va, vb)
End Program
[尽管类型不同和模块不可能有相同的名称,即不能同时命名它们 Vector...]
我正在用 Fortran 编写矢量类型,我感到很困惑。
假设我有以下派生类型
Type (Vector)
Real :: x, y
Contains
Procedure :: vector_smul
End Type
Function vector_smul &
( &
va, vb &
) &
Result (c)
Real :: c
Class (Vector), Intent (In) :: va, vb
c = (va%x + vb%x) + (va%y * vb%y)
End Function vector_smul
但是当我使用
Type (Vectors)
Real :: x, y
Contains
Procedure :: smul => vector_smul
End Type
我在使用时遇到错误
Program Test
Use Vector
Implicit None
Real :: c
Type (Vector) :: va, vb
c = smul (va, vb)
End Program
您只是在定义一个指向 vector_smul
的类型绑定过程 xyz%smul
!原模块程序vector_smul
不受影响!
为了保留 Fortran 标准(2008,第 4.5.5 章)的术语,smul
是 绑定名称 过程名称 vector_smul
。您仍然可以访问过程本身。
在主程序中使用时可以"rename"函数:
Program Test
Use Vector, only: Vector, smul => vector_smul
Implicit None
Real :: c
Type (Vector) :: va, vb
c = smul (va, vb)
End Program
[尽管类型不同和模块不可能有相同的名称,即不能同时命名它们 Vector...]