什么=> (等于大于)意味着在Fortran?

时间:2015-08-07 20:09:30

标签: pointers fortran variable-assignment fortran90

我查看了一些旧的Fortran 90代码并遇到了=>符号:

var => item

看起来它被用于某种任务。

在Google上搜索&#34;箭头符号Fortran&#34; &#34;等于大于符号Fortran&#34; 不会给我任何相关资料。< / p>

2 个答案:

答案 0 :(得分:20)

=>作为现代Fortran中的句法元素出现在六个上下文中,许多(但不是全部)与指针有关:指针赋值; 指针初始化; 程序(指针)声明; 类型绑定过程声明; 协会; 重命名。大多数这些之间有密切的联系。宽松地,在许多=>中可以被视为提供另一种临时或永久的方式来引用另一个实体。但是,无论如何,=>都是运营商。 1

指针分配

指针赋值是=>的传统外观之一,出现在Fortran 90中。它用于将指针与目标相关联,并在another answer中进行了解释。

使用关联重命名

重命名实体使用关联涉及元素=>,并且是Fortran 90/95代码中的另一个外观。这样的use语句就像

use mod_a, c=>a
use mod_b, only : cc => bb

遵循这样的use语句,模块实体abb以本地名称ccc为人所知。

指针初始化

指针初始化很像指针分配,=>出现。指针初始化定义指针的初始指针关联。我们在诸如

之类的陈述中看到了这一点
real, target :: a
real, pointer :: b=>a
real, pointer :: c=>NULL()

使用此显式初始化,此处的指针b最初与a关联,指针c最初未关联。这两种形式在现代Fortran中很有用,因为在Fortran 90中,指针总是从未初始化的未定义关联状态开始。我们知道bc已经定义了指针关联状态,我们可以使用ASSOCIATED

对于派生类型组件,此类语法提供默认初始化。

程序声明

就像定义过程指针的初始关联时数据对象=>的显式/默认初始化一样。

procedure(proc_interface), pointer :: proc1 => donkey
procedure(proc_interface), pointer :: proc2 => null()

此处,proc1最初再次与流程donkey相关联,我们可以使用

这样的内容
call proc1(...)

proc1指针在声明语句之外用donkey指定时,我们就可以了。正如预期的那样,proc2最初没有关联。

与派生类型=>的数据对象组件一样,可以设置对象绑定过程的初始关联

type a
  procedure(proc_interface), pointer :: proc => donkey
end type a

类型绑定过程声明

在概念上与上述相关的是使用=>来声明类型绑定过程。

type a
 contains
  procedure :: proc => donkey
  generic :: assignment(=) => type_a_eq
end type a

此处类型a proc是绑定名称,因此b%proc(对于b类型a的实体)是过程引用。我们还通过type_a_eq定义了左侧有a类型实体的作业。

协会

=>出现在三个关联上下文中。 associateselect typeselect rank结构将名称与选择器相关联。

从Fortran 2003开始我们

associate (a => 1+2)
  ... ! In this block we have an entity named a
end associate

class(*) b   ! b is unlimited polymorphic
select type (a => b)
  type is (real)
    ... ! a is a non-polymorphic real here
end select

在(目前的草案)Fortran 2018中引入我们

dimension(..) b  ! b is assumed rank
select rank (a => b)
  rank (1)
    ... ! a is a rank-1 array here
end select

这些关联与指针不同。 a块中的associate不需要(并且在上面的例子中不是变量)。

[1] operator 的概念在Fortran语言中精确定义,例如Fortran 2008规范的3.2.4。与许多其他语言不同,赋值(使用=)本身不是一个操作,而是一个语句。在类C语言中,我们可以将(a=b)作为返回结果的表达式:在Fortran中不是这种情况。这同样适用于Fortran中的指针赋值。上述其他案例完全不同于这种分配理念。在Fortran中,即使=出现在初始化中也与赋值不同。 =>不能被视为具有一种效果。

答案 1 :(得分:8)

令人惊讶的是,搜索&#34;等于箭头符号Fortran&#34; 会产生一些结果。

&#34; =&gt;&#34; 通常称为pointer assignment operator
(虽然它不是truly an operator,因为它没有返回任何值。)

用于将所选参考名称与目标相关联:

reference => target

以上内容可以理解为&#34;参考指的是目标&#34;

此引用通常以pointer的形式出现。在这种情况下,您可以说&#34;引用指向目标&#34;。这是一种有用的方法来记住这个操作符的作用,因为它的文字外观是从引用到目标的箭头。

进一步使用
其他用途包括为各种项目(如模块组件,过程甚至任意表达式)创建本地别名。有关所有这些用法的完整说明,请参阅this answer

指针分配与传统分配(=)
以上链接中的一个简单示例说明了指针赋值与经典赋值的不同之处(&#34; =&#34; )。基本上,这表明一旦建立了目标,指针就被视为作为基本语句的目标

pt => x ! pt points to x

y = pt ! y equals x

pt => y ! pt points to y

pt = 17 ! y equals 17

其他资源:
General documentation on Fortran pointers