【发布时间】:2016-01-17 04:44:49
【问题描述】:
在以下代码中,我尝试在函数test() 中修改所有全局变量(s、t、u、v)。因为u 和v 在模块内,Mod.u 和Mod.v 是只读变量,所以我尝试通过setter 函数(set_u 和set_v)更改它们的值。
s = 1
const t = 2
module Mod
u = 3
const v = 4
set_u( u_ ) = ( global u ; u = u_ )
set_v( v_ ) = ( global v ; v = v_ )
end
function test()
global s, t
s = "S" ; t = 200
@show s, t
Mod.set_u( "U" ) ; Mod.set_v( 400 )
@show Mod.u, Mod.v
end
test()
@show s, t
@show Mod.u, Mod.v
结果(使用 Julia v0.4.0 获得)是
WARNING: redefining constant t
(s,t) = ("S",2) # (1)
WARNING: redefining constant v
(Mod.u,Mod.v) = ("U",4) # (2)
(s,t) = ("S",200) # (3)
(Mod.u,Mod.v) = ("U",400) # (4)
这里,(3) 和 (4) 是我的预期结果(假设 const 只修复了变量的类型)。但我不明白为什么t 和Mod.v 的值没有在(1)和(2)中更新。我是否在更改全局变量的值方面犯了一些大错误或误解......?还是因为从函数内部或外部引用全局变量的机制不同?
【问题讨论】: