是否可以在引用类型的引用中抑制顶级?

时间:2016-01-14 19:55:36

标签: fortran

这很难用文字描述,但一个例子应该说清楚。假设我有一个派生类型的变量,包含以下组件。

x%length
x%width

有没有自动方式来参考这些没有顶级?换句话说,简单地称它们为

length
width

当然,我可以先做

length => x%length
width  => x%width

对于派生类型的所有单个组件。但是我的用例涉及数千个变量,所以我宁愿不这样做。

作为另一种语言的一个例子,python基本上允许这种抑制:

from x import *

2 个答案:

答案 0 :(得分:2)

据我所知,fortran中没有这样的功能,至少在我手头的实现中是这样。除此之外,我的帖子的目标是让其他一些想法清楚。

python from x import *相当于fortran中的use x。我不是非常pythonic,但我认为你不能直接导入类的成员。所以,只要x是pyton模块,而不是我有限知识的python类,它就可以工作。只要use x是fortran模块,x也会有效。

我所知道的一种编程语言是pascal,它实现了您所追求的功能。有一个方便的构造with,允许你这样做。

with x do
begin
    lenght ....
    width ....
end

实际上,它非常有用,因为它允许您剥离对象名称的一部分并直接转到字段。我在使用pascal时喜欢它,但已经很长时间了。

Delphi当然也允许这样做。

答案 1 :(得分:2)

Fortran 2003关联构造怎么样?从某种意义上说,这将为您管理列出的指针分配:

Program test
  Type :: t
    Integer :: length
    Integer :: width
  End Type
  Type (t) :: x = t(42, 43)
  Associate (length=>x%length, width=>x%width)
    Print *, length, width
  End Associate
End Program

引自Fortran 2003(例如,在http://www.j3-fortran.org/doc/year/04/04-007.pdf):" ASSOCIATE构造在命令实体的块执行期间将命名实体与表达式或变量相关联。"

2015年12月的ACM Fortran论坛"编译器支持"文章将关联构造列为Cray,IBM,Intel和NAG完全支持,并由gfortran部分支持。

我不认为有任何方法可以简化这一点,但如果你有很多类型的组件以这种方式别名。