=>(等于大于)在 Fortran 中是什么意思?
What does => (equals greater than) mean in Fortran?
我正在查看一些旧的 Fortran 90 代码并遇到了 =>
符号:
var => item
它看起来像是被用于某种作业。
在 Google 中搜索 "arrow symbol Fortran" 或 "equals greater than symbol Fortran" 没有找到相关的 material.
令人惊讶的是,搜索 "equals arrow symbol Fortran" 会产生一些结果。
"=>" 通常被称为 pointer assignment operator.
(虽然它不是 因为它 returns 没有价值。)
它用于将选定的参考名称与目标相关联:
reference => target
以上可以读作"reference refers to target"
大多数情况下,此引用以 pointer 的形式出现。在这种情况下,您可以说 "reference points to target"。这是一种有助于记住此运算符的作用的方法,因为它的文字外观是一个从引用指向目标的箭头。
进一步使用
其他用途包括为各种项目(例如模块组件、过程,甚至任意表达式)制作本地别名。有关所有这些用途的完整说明,请参阅 .
指针赋值与传统赋值 (=)
这是上面 link 中的一个简单示例,它说明了指针赋值与经典赋值 ("=") 的不同之处。基本上这表明,一旦建立了目标,指针就被视为作为基本语句的目标。
pt => x ! pt points to x
y = pt ! y equals x
pt => y ! pt points to y
pt = 17 ! y equals 17
=>
作为现代 Fortran 中的句法元素出现在六个上下文中,许多但不是全部与指针相关:指针赋值; 指针初始化; 过程(指针)声明; 类型绑定过程声明; 协会; 正在重命名。其中大多数之间存在密切联系。松散地,在许多情况下 =>
可以被视为提供了一种替代的临时或永久引用另一个实体的方法。然而,在 none 中,=>
充当运算符。1
指针赋值
指针赋值是=>
的传统表现形式之一,出现在Fortran 90中,用于将指针与目标相关联,在中有解释。
使用关联重命名
重命名实体使用关联涉及元素=>
,是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
.
对于派生类型组件,此类语法提供默认初始化。
程序声明
与 explicit/default 数据对象的初始化非常相似 =>
定义过程指针的初始关联的功能。
procedure(proc_interface), pointer :: proc1 => donkey
procedure(proc_interface), pointer :: proc2 => null()
在这里,proc1
再次最初与过程 donkey
相关联,我们可以有这样的东西
call proc1(...)
就像我们在声明语句外用 donkey
赋值 proc1
指针一样。 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
、change team
、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
和
change team (team_value, a[*] => b)
... ! In this block we have a coarray named a
end team
这些关联不同于指针。 associate
块中的 a
不必是(在上面的示例中也不是)变量。
[1] operator的概念在Fortran语言中有精确的定义,比如在Fortran 2008规范的3.2.4中。与许多其他语言不同,赋值(=
)本身不是一个操作,而是一个语句。在类 C 语言中,我们可以将 (a=b)
作为返回结果的表达式:这在 Fortran 中不是这种情况。 Fortran 中的指针赋值也是如此。上面的其他情况与这种分配的想法完全不同。在 Fortran 中,即使 =
出现在初始化中也与赋值不同。 =>
不能被视为有一个效果。
我正在查看一些旧的 Fortran 90 代码并遇到了 =>
符号:
var => item
它看起来像是被用于某种作业。
在 Google 中搜索 "arrow symbol Fortran" 或 "equals greater than symbol Fortran" 没有找到相关的 material.
令人惊讶的是,搜索 "equals arrow symbol Fortran" 会产生一些结果。
"=>" 通常被称为 pointer assignment operator.
(虽然它不是
它用于将选定的参考名称与目标相关联:
reference => target
以上可以读作"reference refers to target"
大多数情况下,此引用以 pointer 的形式出现。在这种情况下,您可以说 "reference points to target"。这是一种有助于记住此运算符的作用的方法,因为它的文字外观是一个从引用指向目标的箭头。
进一步使用
其他用途包括为各种项目(例如模块组件、过程,甚至任意表达式)制作本地别名。有关所有这些用途的完整说明,请参阅
指针赋值与传统赋值 (=)
这是上面 link 中的一个简单示例,它说明了指针赋值与经典赋值 ("=") 的不同之处。基本上这表明,一旦建立了目标,指针就被视为作为基本语句的目标。
pt => x ! pt points to x
y = pt ! y equals x
pt => y ! pt points to y
pt = 17 ! y equals 17
=>
作为现代 Fortran 中的句法元素出现在六个上下文中,许多但不是全部与指针相关:指针赋值; 指针初始化; 过程(指针)声明; 类型绑定过程声明; 协会; 正在重命名。其中大多数之间存在密切联系。松散地,在许多情况下 =>
可以被视为提供了一种替代的临时或永久引用另一个实体的方法。然而,在 none 中,=>
充当运算符。1
指针赋值
指针赋值是=>
的传统表现形式之一,出现在Fortran 90中,用于将指针与目标相关联,在
使用关联重命名
重命名实体使用关联涉及元素=>
,是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
.
对于派生类型组件,此类语法提供默认初始化。
程序声明
与 explicit/default 数据对象的初始化非常相似 =>
定义过程指针的初始关联的功能。
procedure(proc_interface), pointer :: proc1 => donkey
procedure(proc_interface), pointer :: proc2 => null()
在这里,proc1
再次最初与过程 donkey
相关联,我们可以有这样的东西
call proc1(...)
就像我们在声明语句外用 donkey
赋值 proc1
指针一样。 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
、change team
、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
和
change team (team_value, a[*] => b)
... ! In this block we have a coarray named a
end team
这些关联不同于指针。 associate
块中的 a
不必是(在上面的示例中也不是)变量。
[1] operator的概念在Fortran语言中有精确的定义,比如在Fortran 2008规范的3.2.4中。与许多其他语言不同,赋值(=
)本身不是一个操作,而是一个语句。在类 C 语言中,我们可以将 (a=b)
作为返回结果的表达式:这在 Fortran 中不是这种情况。 Fortran 中的指针赋值也是如此。上面的其他情况与这种分配的想法完全不同。在 Fortran 中,即使 =
出现在初始化中也与赋值不同。 =>
不能被视为有一个效果。