gpt4 book ai didi

fortran - Fortran 中函数返回值的直接索引

转载 作者:行者123 更新时间:2023-12-03 14:05:01 25 4
gpt4 key购买 nike

是否有可能直接在函数的返回值上使用索引?像这样的东西:

readStr()(2:5)
在哪里 readStr()是一个返回字符串或数组的函数。在许多其他语言中这是很有可能的,但是 Fortran 呢?我的示例中的语法当然无法编译。有没有其他语法可以使用?

最佳答案

不,这在 Fortran 中是不可能的。但是,您可以更改您的函数以采用额外的索引数组来确定返回哪些元素。这个例子说明了这种可能性,使用一个接口(interface)来允许索引的可选规范(由于 IanH 的评论大大简化了):

module test_mod
implicit none

contains

function squareOpt( arr, idx ) result(res)
real, intent(in) :: arr(:)
integer, intent(in), optional :: idx(:)
real,allocatable :: res( : )
real :: res_( size(arr) )
integer :: stat

! Calculate as before
res_ = arr*arr

if ( present(idx) ) then
! Take the sub-set
allocate( res(size(idx)), stat=stat )
if ( stat /= 0 ) stop 'Cannot allocate memory!'

res = res_(idx)
else
! Take the the whole array
allocate( res(size(arr)), stat=stat )
if ( stat /= 0 ) stop 'Cannot allocate memory!'

res = res_
endif

end function
end module

program test
use test_mod
implicit none

real :: arr(4)
integer :: idx(2)

arr = [ 1., 2., 3., 4. ]
idx = [ 2, 3]

print *, 'w/o indices',squareOpt(arr)
print *, 'w/ indices',squareOpt(arr, idx)
end program

关于fortran - Fortran 中函数返回值的直接索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28762841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com