我查看了一些旧的Fortran 90代码并遇到了=>
符号:
var => item
看起来它被用于某种任务。
在Google上搜索&#34;箭头符号Fortran&#34; 或&#34;等于大于符号Fortran&#34; 不会给我任何相关资料。< / p>
答案 0 :(得分:20)
=>
作为现代Fortran中的句法元素出现在六个上下文中,许多(但不是全部)与指针有关:指针赋值; 指针初始化; 程序(指针)声明; 类型绑定过程声明; 协会; 重命名。大多数这些之间有密切的联系。宽松地,在许多=>
中可以被视为提供另一种临时或永久的方式来引用另一个实体。但是,无论如何,=>
都是运营商。 1
指针赋值是=>
的传统外观之一,出现在Fortran 90中。它用于将指针与目标相关联,并在another answer中进行了解释。
重命名实体使用关联涉及元素=>
,并且是Fortran 90/95代码中的另一个外观。这样的use
语句就像
use mod_a, c=>a
use mod_b, only : cc => bb
遵循这样的use
语句,模块实体a
和bb
以本地名称c
和cc
为人所知。
指针初始化很像指针分配,=>
出现。指针初始化定义指针的初始指针关联。我们在诸如
real, target :: a
real, pointer :: b=>a
real, pointer :: c=>NULL()
使用此显式初始化,此处的指针b
最初与a
关联,指针c
最初未关联。这两种形式在现代Fortran中很有用,因为在Fortran 90中,指针总是从未初始化的未定义关联状态开始。我们知道b
和c
已经定义了指针关联状态,我们可以使用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
类型实体的作业。
=>
出现在三个关联上下文中。 associate
,select type
和select 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