使用不带 % 的 Fortran 派生类型变量
using fortran derived type variable without %
我定义了一个名为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
而无需编写 A%MAT
。换句话说,是否有任何解决方法可以按照以下形式重写以前的代码块(使用 A
而不是 A%MAT
)
ALLOCATE(A(2,2))
A(1,:) = [1,2]
A(2,:) = [3,4]
PRINT*, A
不幸的是,Fortran 标准(撰写本文时为 Fortran 2018)当前不允许语法 a(1,:) = [1,2]
,其中 a
是派生类型。
a proposal 在未来的 Fortran 标准中允许这样做。
您可以使用 associate
语句将某些表达式绑定到较短的名称。这可用于为变量的组件命名。
allocate(A%mat(2, 2))
associate(B => A%mat(:, :))
B(1,:) = [1, 2]
B(2,:) = [3, 4]
write(*, *) B
end associate
请注意,您还可以使用 reshape
和自动分配来摆脱一些切片。
! No allocate statement necessary.
A%mat = reshape([1, 2, 3, 4], [2, 2])
我定义了一个名为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
而无需编写 A%MAT
。换句话说,是否有任何解决方法可以按照以下形式重写以前的代码块(使用 A
而不是 A%MAT
)
ALLOCATE(A(2,2))
A(1,:) = [1,2]
A(2,:) = [3,4]
PRINT*, A
不幸的是,Fortran 标准(撰写本文时为 Fortran 2018)当前不允许语法 a(1,:) = [1,2]
,其中 a
是派生类型。
a proposal 在未来的 Fortran 标准中允许这样做。
您可以使用 associate
语句将某些表达式绑定到较短的名称。这可用于为变量的组件命名。
allocate(A%mat(2, 2))
associate(B => A%mat(:, :))
B(1,:) = [1, 2]
B(2,:) = [3, 4]
write(*, *) B
end associate
请注意,您还可以使用 reshape
和自动分配来摆脱一些切片。
! No allocate statement necessary.
A%mat = reshape([1, 2, 3, 4], [2, 2])