gpt4 book ai didi

julia - 如何在 Julia 模块中正确定义和使用全局变量?

转载 作者:行者123 更新时间:2023-12-04 14:53:19 24 4
gpt4 key购买 nike

在 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) 并将模块中的 var 设置为 2x。

现在在 Julia 中,看起来像下面这样,

module Mod
global var
function f(x::Float64)
global var = 2.0*x
return nothing
end
  1. 我的意思是,在函数中,如果 var 在左侧,我是否必须每次都指定关键字“global”?

  2. 我也试着给全局变量一个类型,比如

    全局变量::Float64

但它给了我一个错误

syntax: type declarations on global variables are not yet supported

看来我只能做要么什么都不指定,就像只是

global var

或者在设置它的类型时给它一个值,

global var=0.0::Float64

在使用前给全局变量一个类型是否更好?

最佳答案

这是一种制作您想要的东西并使其高效的方法:

julia> const x = Ref(0)
Base.RefValue{Int64}(0)

julia> function f(y)
x[] = y
end

f (generic function with 1 method)

julia> x[]
0

julia> f(10)
10

julia> x[]
10

julia> f("10")
ERROR: MethodError: Cannot `convert` an object of type String to an object of type Int64

julia> f(5.0)
5.0

julia> x[]
5

评论:

  1. 我将 x 设为 const 以确保编译器知道它的类型(以便它可以优化代码)
  2. 我将 x 设为 Ref 以允许其内容可变,并在稍后的 x[] = y 声明中明确说明x[] 部分引用全局变量(因为变量 x 未在 f 的局部范围内定义)
  3. 如您在示例中所见,我无法在 f 的调用中使用 "10",因为它没有匹配的类型。请注意,我可以使用 5.0( float ),因为它可以转换为整数。

关于julia - 如何在 Julia 模块中正确定义和使用全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68630528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com