Lua学习 -- local变量和表

local在lua编程中经常写,lua对local的处理有加速访问的效果,并且将变量定义为局部变量

也是一种好的编程习惯。

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

============== example ===============

foo = {}

foo.a = 1;

do

local foo = foo

foo.a = 2

print(foo, _G["foo"])

print(foo.a)

print(_G["foo"].a)

end

 

print(_G["foo"].a)

 

print("----next case----")

var = 1

do

local var = var

var = 2

print(var)

print(_G["var"])

end

执行结果:

table: 0x7febca407920 table: 0x7febca407920

2

2

2

----next case----

2

1

1

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

通过代码结果可以看到,local表=全局表,是同一个表,这主要是由于lua的表机制是匿名的,

相当于函数的指针,local foo=foo,即使本地foo没有在全局_G注册,还是引用的是同一个表。

当没有变量指向表的时候,垃圾回收器会销毁这个匿名表。

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

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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值