您的位置:首页 > 科技 > 能源 > Julia编程11:变量作用域 Scope of Variables

Julia编程11:变量作用域 Scope of Variables

2024/11/20 7:04:38 来源:https://blog.csdn.net/2401_84540063/article/details/139456012  浏览:    关键词:Julia编程11:变量作用域 Scope of Variables

There are two main types of scopes in Julia, global* scope* and local* scope*.

Julia有全局变量作用域和局部变量作用域,函数或者一些结构体、循环体如for等是否内部是局部环境可以参照下表。

ConstructScope typeAllowed within
modulebaremoduleglobalglobal
structlocal (soft)global
forwhiletrylocal (soft)global, local
macrolocal (hard)global
functionslocal (hard)global, local
do blocks, let blocks, comprehensions, generatorslocal (hard)global, local
begin blocks,  if blocksonly globalonly global

soft意思是只要不重名就行,hard必须是一个独立的局部变量。

  • hard scope

第一种情况很符合直觉,函数运行后x还是123,函数内的x默认是局部变量

the hard scope rule isn't affected by anything in global scope

x = 123
function greet()x = "hello" # new localprintln(x)
end
greet()
x == 123 

第二种情况,使用global关键字声明x是全局变量,那么就修改了全局变量的x,因为全局变量中已经有了x,第二次赋值就覆盖了

x = 123function greet()global x = "hello" # new localprintln(x)
endgreet()
x == "hello"
  • soft scope

for循环是local (soft)类型,我们先定义一个全局变量s=0,然后在for循环中也有一个变量s,因为重名所以 新的赋值语句修改了全局变量s;但是全局变量中没有t所以新建了一个局部的t,并且外部是访问不到这个t的,因为t是局部变量。

这样写,全局的s和局部的s可能产生歧义,详细见官网,最好规避,或者写上 global。

s = 0 # globalfor i = 1:10t = s + i # new local `t`s = t # assign global `s`
ends == 55
t
# UndefVarError: t not defined

用global关键字,同样效果,但是思路更清晰

s = 0 # globalfor i = 1:10t = s + i # new local `t`global s = t # assign global `s`
ends == 55

Reference

https://docs.julialang.org/en/v1/manual/variables-and-scoping/

300?wx_fmt=png&wxfrom=18可嘉:j16608819485

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com