我希望您能提供一些关于创建一个存储任意数据和任意阶数的派生类型的最佳方法的通用建议。
假设我有一个名为
这对标量数据有效,但我不确定如何为任意秩数据设置它。我知道过程可以接受假设秩参数,所以
我想到的另一种方法是将任意秩数据存储为标量,如果在Fortran中可能的话? 这相当于在PHP中使用
最终,我想能够像这样做:
假设我有一个名为
Result
的派生类型,其中包含一个data
成员(以及其他成员):type, public :: Result
private
class(*), allocatable :: data
...
end type
这个过程由某个程序初始化(从一个名为 Result
的接口调用):
function init(data) result(this)
type(Result) :: this
class(*), intent(in) :: data
allocate(this%data, source=data)
end function
这对标量数据有效,但我不确定如何为任意秩数据设置它。我知道过程可以接受假设秩参数,所以
init(data)
函数中的data
可以是data(..)
,但我不确定是否可能将派生类型属性this%data
指定为假定秩?我想到的另一种方法是将任意秩数据存储为标量,如果在Fortran中可能的话? 这相当于在PHP中使用
serialize()
和unserialize()
函数。 如果有人对类似方法有任何指导,我会非常感激。最终,我想能够像这样做:
type(Result) :: scalarResult
type(Result) :: 2DResult
scalarResult = Result(data=1.234)
2DResult = Result(data=[[1,2,3],[4,5,6]])
type(Result)
还有一个error
组件,这里没有显示,是另一个派生类型type(ErrorInstance)
,因此每个函数都返回数据和可能的错误。数据本身的最终用途将是多种多样的,例如可能会传递给其他函数、打印在某个地方等等。我决定采用 Vladimir 的建议,使用单独的类型,尽管这显然有一个限制,即只能处理有限的维度。 - Sam Harrison