访问函数结果中的元素
Access element in function result
为什么这个 Fortran 代码不正确?
function foo(x)
real x
real, dimension(3) :: foo
foo = (/1, 2, 3/)
end
... 在主程序中
print*, foo(x)(1)
为什么我们不能直接访问函数结果中的元素?
当你思考自己的问题时
Why we cannot access element in function result directly?
我建议你在主程序中也写几行,例如
res = foo(x) ! having taken care to declare res appropriately
print*, res(1)
然后继续你的编码。以您尝试过的方式索引函数调用在语法上是不正确的。
所以您最初问题的一个答案是 因为 Fortran 的语法就是这样定义的 您可能会被提示回答 为什么 Fortran 的语法定义为way ? 即使这个过程以引用 Fortran 设计根源(现已超过 50 岁)的形式找到答案,您仍然需要修改代码以与 Fortran 的设计保持一致句法。你的编译器肯定不会说 你知道,你写的比我编程接受的语法要好,我现在就编译它...
告诉所有需要的。当您追求句法优美时,我将在其中解决一件事:"having taken care to declare res appropriately".
可以使用关联结构来稍微隐藏这一点。
associate (res => foo(x))
print *, res(1)
end associate
除了减少垃圾声明外,这对答案没有任何改变。
为什么这个 Fortran 代码不正确?
function foo(x)
real x
real, dimension(3) :: foo
foo = (/1, 2, 3/)
end
... 在主程序中
print*, foo(x)(1)
为什么我们不能直接访问函数结果中的元素?
当你思考自己的问题时
Why we cannot access element in function result directly?
我建议你在主程序中也写几行,例如
res = foo(x) ! having taken care to declare res appropriately
print*, res(1)
然后继续你的编码。以您尝试过的方式索引函数调用在语法上是不正确的。
所以您最初问题的一个答案是 因为 Fortran 的语法就是这样定义的 您可能会被提示回答 为什么 Fortran 的语法定义为way ? 即使这个过程以引用 Fortran 设计根源(现已超过 50 岁)的形式找到答案,您仍然需要修改代码以与 Fortran 的设计保持一致句法。你的编译器肯定不会说 你知道,你写的比我编程接受的语法要好,我现在就编译它...
可以使用关联结构来稍微隐藏这一点。
associate (res => foo(x))
print *, res(1)
end associate
除了减少垃圾声明外,这对答案没有任何改变。