lua中的每個函式會被lua虛擬機器解析儲存在funcstate結構體中(乙個lua檔案本身也會對應乙個funcstate結構),每個funcstate有乙個prev指標指向它的父函式(最高層是某個lua檔案,即全域性環境,改層的prev指標為null)。
lua的變數分三種型別:全域性變數、區域性變數和upvalue。
有了以上的認識之後,我們來看看lua函式是怎麼獲取它需要用到的變數,以一下**為例:
a = 1
function func()
local b = 2
function test()
local c = 3
print(c + b + a)
endreturn test()
endf = func()
f()
查詢c:在test的環境中查詢到c,因此c是區域性變數
查詢b:在test的環境中無法查詢到b,則通過prev指標進入它的父函式func中查詢,查詢成功,因此b為upvalue
查詢a:在test的環境中無法查詢到a,則通過prev指標進入它的父函式func中查詢,查詢失敗,則繼續通過func的prev指標進入全域性環境中查詢,找到a,因此a是全域性變數
從以上的過程看,使用lua時適當的優先使用區域性變數可以提高程式效率。
xLua C 訪問Lua之訪問Lua的變數
在resources資料夾中新建乙個csharpcalllua.lua.txt檔案,定義幾個變數 i 10 str wwz isstu false void start lua的number型別對於c 的int,float,double的,如果型別不對,會返回0比如在lua中i 10.1,c 中in...
Lua學習之閉合函式
閉合函式 closure 看lua程式設定這本書的時候,其實感覺也就lua也就那樣,直到看到閉合函式這乙個塊 首先來說說函式,函式在lua中屬於第一類值,其實對於函式而言,function a end 和 a function end 是等價的,乙個函式的定義實際上就是一條賦值語句,這條語句首先建立...
Lua資料之函式(特殊)
區域性函式 由於全域性變數一般會汙染全域性名字空間,同時也有效能損耗 即查詢全域性環境表的開銷 因此我們應當盡量使用 區域性函式 其記法是類似的,只是開頭加上 local 修飾符 local function function name arc body end由於函式定義等價於變數賦值,我們也可以...