为什么 Fortran 会将标量表达式提升为数组表达,但不作为过程的参数?特别是,为什么标准机构做出这样的设计决定?仅仅是因为含糊不清,程序就应该超载吗?在这种情况下,错误消息是否可以作为替代方法?
例如,在下面的代码中,最后一条语句,x = foo(7)
,产生 GFortran 错误:Error: Rank mismatch in argument 'a' at (1) (1 and 0)
.
module m
public :: foo
contains
function foo(a) result(b)
integer, dimension(:) :: a
integer, dimension(size(a)) :: b
b = a+1
end function foo
end module m
program p
use m
integer, dimension(4) :: x
integer, parameter, dimension(4) :: y = (/1,2,3,4/)
x = 7
x = foo(x)
x = foo(y)
x = foo(x + 7)
x = foo(7)
end program p
这个问题应该问为什么数组赋值会将标量值源提升为数组目标;与数组函数不同。我希望这只是一个方便的特殊情况。如有任何意见,请在下面的乞讨帽中感激不尽。
如果您希望函数处理缩放器和数组参数,请将其声明为“元素”并使用缩放器虚拟参数。然后它将能够处理缩放器和数组实际参数,包括缩放器表达式。这能满足您的需求吗?
改变:
elemental function foo(a) result(b)
integer, intent (in) :: a
integer :: b
b = a+1
end function foo
也许他们提供了一种方法来实现您想要的功能,并且一种方法就足够了?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)