在Fortran中直接为函数返回值建立索引 [英] Direct indexing of function return value in Fortran
问题描述
是否可以直接在函数的返回值上使用索引?像这样:
Is there possibility to use indexing directly on a function's return value? Something like this:
readStr()(2:5)
其中,readStr()
是一个返回字符串的函数.在许多其他语言中,这是完全可能的,但是Fortran呢?我的示例中的语法当然不会编译.还有其他语法可以使用吗?
where readStr()
is a function which returns a character string. In many other languages it is quite possible, but what about Fortran? The syntax in my example of course does not compile. Is there any other syntax to be used?
推荐答案
否,在Fortran中是不可能的.但是,您可以更改函数以采用其他索引数组,该数组确定返回哪些元素.此示例说明了使用接口允许对索引进行可选指定的可能性(由于IanH的注释,大大简化了此操作):
No, that is not possible in Fortran. You could, however, alter your function to take an additional index array that determines which elements are returned. This example illustrates this possibility using an interface to allow for an optional specification of the indices (simplified greatly thanks to the comment by 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中直接为函数返回值建立索引的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!