Fortran 是否可以抑制对派生类型的引用中的顶层?
这很难用语言来描述,但一个例子应该说明这一点。假设我有一个派生类型的变量,包含以下组件Fortran 是否可以抑制对派生类型的引用中的顶层?,fortran,Fortran,这很难用语言来描述,但一个例子应该说明这一点。假设我有一个派生类型的变量,包含以下组件 x%length x%width 有没有什么方法可以在没有顶层的情况下自动引用这些内容?换言之,将它们简单地称为 length width 当然,我可以先做 length => x%length width => x%width 对于派生类型的所有单个组件。但是我的用例涉及数千个变量,所以我不希望这样做 作为另一种语言的一个示例,python将基本上允许这种抑制: from x impor
x%length
x%width
有没有什么方法可以在没有顶层的情况下自动引用这些内容?换言之,将它们简单地称为
length
width
当然,我可以先做
length => x%length
width => x%width
对于派生类型的所有单个组件。但是我的用例涉及数千个变量,所以我不希望这样做
作为另一种语言的一个示例,python将基本上允许这种抑制:
from x import *
据我所知,fortran中没有这样的功能,至少在我手头的实现中是这样。除此之外,我这篇文章的目的是让其他一些想法变得清晰 来自x import*的python
相当于fortran中的use x
。我不是很pythonic,但我不认为可以直接导入类的成员。因此,只要x是pyton模块,而不是我所知有限的python类,它就可以工作<只要x
是fortran模块,code>use x
也可以工作
我所知道的实现您所追求的功能的编程语言之一是pascal
。有一个方便的结构和
允许您这样做
with x do
begin
lenght ....
width ....
end
实际上,它非常有用,因为它允许您剥离对象名称的一部分并直接访问字段。当我使用pascal时,我很喜欢它,但是已经很久了
Delphi
当然也允许这样做。据我所知,fortran中没有这样的功能,至少在我手头的实现中是这样的。除此之外,我这篇文章的目的是让其他一些想法变得清晰
来自x import*的python相当于fortran中的use x
。我不是很pythonic,但我不认为可以直接导入类的成员。因此,只要x是pyton模块,而不是我所知有限的python类,它就可以工作<只要x
是fortran模块,code>use x
也可以工作
我所知道的实现您所追求的功能的编程语言之一是pascal
。有一个方便的结构和
允许您这样做
with x do
begin
lenght ....
width ....
end
实际上,它非常有用,因为它允许您剥离对象名称的一部分并直接访问字段。当我使用pascal时,我很喜欢它,但是已经很久了
Delphi
当然也允许这样做。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(例如,at):“关联构造在其块执行期间将命名实体与表达式或变量关联。”
2015年12月的ACM Fortran论坛“编译器支持”文章列出了关联构造,该构造完全受Cray、IBM、Intel和NAG支持,部分受gfortran支持
我不认为有任何方法可以简化这一点,但如果您有许多类型组件以这种方式别名。Fortran 2003 associate构造如何?从某种意义上说,这将为您管理列出的指针分配:
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(例如,at):“关联构造在其块执行期间将命名实体与表达式或变量关联。”
2015年12月的ACM Fortran论坛“编译器支持”文章列出了关联构造,该构造完全受Cray、IBM、Intel和NAG支持,部分受gfortran支持
我不认为有任何方法可以简化这一点,但如果您有许多类型组件以这种方式别名。@JohnE,我理解,拥有派生类型首先是将所有内容都放在一个变量中。我想指出,与python的类比并不是您所描述的那样。但是,我很清楚,因为我在另一种语言中使用了这样的功能,
pascal
。好的,谢谢。我的意思只是从x import*的角度来看这个例子,而不是import x
。我同意这与fortran不是一个完美的类比,只是我能想出的最接近于说明这一点的类比。@JohnE,我明白,拥有派生类型首先是将所有东西都放在一个变量中。我想指出,与python的类比并不是您所描述的那样。但是,我很清楚,因为我在另一种语言中使用了这样的功能,pascal
。好的,谢谢。我的意思只是从x import*
的角度来看这个例子,而不是import x
。我同意这与fortran不是一个完美的类比,只是我能想出的最接近的例子来帮助说明这一点。谢谢!我不确定这比指针有多大的实际改进(虽然有一个方便的临时方面),但不管怎样,知道这一点还是很好的。谢谢!我不确定这比指针有多大的实际改进(尽管有一个方便的临时方面),但无论如何,了解一下这一点是很好的。