您好,登錄后才能下訂單哦!
local是我們在lua編程里面經常寫的,經常寫的方式為local foo = foo。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
print(_G["var"])
執行結果:
table: 0x7febca407920 table: 0x7febca407920
2
2
2
----next case----
2
1
1
=============
通過代碼結果可以看到,local表=全局表,是同一個表,這主要是由于lua的表機制是匿名的,相當于函數的指針,local foo = foo,即使本地foo沒有在全局_G注冊,還是引用的是同一個表。當沒有變量指向表的時候,垃圾回收器會銷毀這個匿名表。
而local變量則是創建一個新的變量,遵守子作用域覆蓋父作用域的規則。
特別是對于require "modname"中的模塊,在編寫的時候,不能直接使用全局變量,因為是同一個變會保存其變量狀態影響其他使用。最好的處理方式就是盡可能的依據入參,函數內部定義local 變量等來編寫代碼。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。