lua当地变量和表

本地是我们在lua编程里面经常写的,经常写的方式为当地foo=foo.lua对当地的处理有加速访问的效果,并且将变量定义为局部变量也是一种好的编程习惯。


lua对变量和表的局部化处理的方式是不同的

============示例

foo={}

foo。一个=1


当地foo=foo

foo。=2

打印(foo, _G [" foo "])

打印(foo.a)

打印(_G [“foo”]。)

结束

打印(_G [“foo”]。)


打印(“——下一个案例——”)

var=1

当地var=var

var=2

打印(var)

打印(_G [“var”])

结束

打印(_G [“var”])


执行结果:

表:0 x7febca407920table: 0 x7febca407920

2 2

——下一个案例——2

1

=============

通过代码结果可以看的到,当地表=全局表,是同一个表,这主要是由于lua的表机制是匿名的,相当于函数的指针,当地foo=foo,即使本地foo没有在全局_G注册,还是引用的是同一个表。当没有变量指向表的时候,垃圾回收器会销毁这个匿名表。

而当地变量则是创建一个新的变量,遵守子作用域覆盖父作用域的规则。

特别是对于“modname”中需要的模块,在编写的时候,不能直接使用全局变量,因为是同一个变会保存其变量状态影响其他使用。最好的处理方式就是尽可能的依据入参,函数内部定义当地变量等来编写代码。


lua当地变量和表