Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 是否可以抑制对派生类型的引用中的顶层?_Fortran - Fatal编程技术网

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不是一个完美的类比,只是我能想出的最接近的例子来帮助说明这一点。谢谢!我不确定这比指针有多大的实际改进(虽然有一个方便的临时方面),但不管怎样,知道这一点还是很好的。谢谢!我不确定这比指针有多大的实际改进(尽管有一个方便的临时方面),但无论如何,了解一下这一点是很好的。