在Fortran中,我们可以在一个模块中定义全局变量(使用private属性),以便我们可以使用模块中的子例程来设置或更改该变量的值。如下所示:
或者在设置其类型的同时给它一个值,
module Mod
integer, parameter :: r8=selected_real_kind(15,9)
real(kind=r8), private, save :: var
contains
subroutine f(x)
real(kind=r8) :: x
var = 2.0_r8*x
end subroutine f
end
我们可以看到,我们可以调用f(x)并将模块中的变量设置为2x。
现在在Julia中,看起来像下面这样:
module Mod
global var
function f(x::Float64)
global var = 2.0*x
return nothing
end
我的意思是,如果在函数中变量在左侧,我是否每次都需要指定关键字“global”?
我还尝试为全局变量指定类型,例如
global var :: Float64
但是它给了我一个错误。
syntax: type declarations on global variables are not yet supported
看起来我只能什么都不指定,就像这样:
global var
或者在设置其类型的同时给它一个值,
global var=0.0::Float64
在使用全局变量之前,最好为其指定类型。
r8
在某个地方被设置了,但在这里使用时未定义。整数2
在浮点数中可以精确表示,所以var = 2 * x
比你写的表达式更清晰。最后,在模块的规范部分声明的变量隐含具有save
属性,因此real(kind=r8), private, save :: var
过于冗长。 - stevevar
称为全局变量(请使用私有属性)。var
不是全局的。private
属性将var
的可见性限制在模块命名空间中。Fortran 2018标准的第19.2节定义了全局标识符,而变量不包括在列表中。 - steve