【发布时间】:2021-09-13 05:16:59
【问题描述】:
我定义了一个名为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
【问题讨论】:
-
一种选择是使用parameterized derived type,因此您不需要可分配的数组成员。另一种选择是将已分配的数组作为参数传递给构造函数。甚至是自定义构造函数。
-
@RodrigoRodrigues 我认为这不能解决对
%语法的需求。 Masoud 可能正在寻找一些已定义的操作(自定义添加、分配、IO、inexing)。遗憾的是,在 Fortran 中无法重载索引。 -
您可以使用构造函数一次性设置整个数组,或者适当地重载赋值运算符。但是你不能在没有 % 的情况下指定单个元素或切片,至少据我所知
-
是的...
print*, a可以通过custom derived-type I/O 实现。对象初始化,你可以得到类似a = matrix(2, 2)的自定义构造函数,或allocate(matrix(2, 2) :: a)的参数化类型。但是对于a(1, :) = [1, 2]是没有办法的,只能把a当作一个数组(或者字符)来解释。 fortran 中没有索引重载
标签: fortran derived-types