我定义了一个名为 MATRIX
的类型和一个该类型的变量 A
,如下所示:
TYPE MATRIX
REAL, ALLOCATABLE, DIMENSION(:,:) :: MAT
END TYPE
TYPE(MATRIX) :: A
构造A
并使用它的通常方式为:
ALLOCATE(A%MAT(2,2))
A%MAT(1,:) = [1,2]
A%MAT(2,:) = [3,4]
PRINT*, A%MAT
我想知道是否有可能在不写 A%MAT
的情况下使用变量 A
进行操作。换句话说,是否有任何方法将前面的代码块重写为以下形式(使用 A
而不是 A%MAT
)。
ALLOCATE(A(2,2))
A(1,:) = [1,2]
A(2,:) = [3,4]
PRINT*, A
%
语法的需求。Masoud可能正在寻找一些定义好的操作(自定义添加、赋值、IO、索引等)。不幸的是,在Fortran中无法重载索引。 - Vladimir F Героям славаprint*, a
可以通过自定义派生类型 I/O来实现。对象初始化,你可以使用自定义构造函数得到类似于a = matrix(2, 2)
的结果,或者使用参数化类型的allocate(matrix(2, 2) :: a)
。但是对于a(1, :) = [1, 2]
,没有办法,它只能被解释为a
是一个数组(或字符)。在 Fortran 中没有索引重载。 - Rodrigo Rodrigues