我想创建一个类型来包含 Fortran 中的字符串数组,而无需显式分配长度,以便我可以从函数返回它。
以下是我的类型:
type returnArr
Character (*), dimension(4) :: array
end type returnArr
以下是函数的签名:
type(returnArr) FUNCTION process(arr, mean, stdDev) result(j)
以下是我尝试设置结果的地方:
j%array(1)= "Test"
但我得到的只是以下错误:
Error: Character length of component ‘array’ needs to be a constant specification expression at (1)
如何声明类型以使字符串可以具有不同的长度?
派生类型的字符组件可以具有显式长度,也可以具有自己的长度deferred。后者是改变其价值的方式(通过多种方式中的任何一种)。还必须允许派生类型数组具有不同长度的灵活性。
然而,使用len=*
不是说“延迟长度”的正确方法(它是“假定长度”)。相反,您可以使用len=:
并使组件可分配(或指针):
type returnArr
Character (:), allocatable :: char
end type returnArr
那么一个人可能有一系列returnArr
对象:
function process(arr, mean, stdDev) result(j)
type(returnArr) :: j(4)
end function
赋值如
j(1)%char = "Test"
然后依赖组件的自动分配char
.
请注意,现在函数结果是该容器类型的数组。我们做不到
function process(arr, mean, stdDev) result(j)
character(:), allocatable :: j(:)
end function
并分配j(1)
长度不同于j(2)
(etc.).
相似地
type returnArr
Character (:), allocatable :: char(:)
end type returnArr
不允许那些char
组成元素具有不同的长度。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)