使用不带 % 的 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])