【问题标题】:Access element in function result函数结果中的访问元素
【发布时间】:2021-04-15 00:30:20
【问题描述】:

为什么这个 Fortran 代码不正确?

function foo(x)
real x
real, dimension(3) :: foo
foo = (/1, 2, 3/)
end

...在主程序中

print*, foo(x)(1)

为什么我们不能直接访问函数结果中的元素?

【问题讨论】:

  • 因为标准不知道这样的语法。这个问题几乎没有任何意义。

标签: arrays function fortran


【解决方案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 的语法是这样定义的?如果这个过程以参考 Fortran 设计的根源(现在已有 50 多年的历史)的形式给出了答案,那么您仍然需要修改代码以与 Fortran 的语法保持一致。你的编译器肯定不会说你知道,你写的比我被编程接受的语法更好,我现在就编译它...

【讨论】:

  • 非常感谢,我以为我忘记了 Fortran 语法。或者我疯了)恕我直言,语法不清楚,但c'est la vie
【解决方案2】:

answer by High Performance Mark 告诉所有需要的信息。当您追求语法上的好处时,我将在其中解决一件事:“注意适当地声明 res”。

可以使用关联构造来隐藏这一点。

associate (res => foo(x))
  print *, res(1)
end associate

除了减少垃圾声明之外,这不会改变该答案。

【讨论】:

  • 谢谢,我忘记了“关联”。本地 var 'res' 看起来更好。
猜你喜欢
  • 1970-01-01
  • 2021-09-20
  • 2019-09-24
  • 1970-01-01
  • 1970-01-01
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多