lua基礎學習 閉合函式(closure)

2021-06-09 19:31:18 字數 701 閱讀 1514

先看**:

newcounter = function(add)

local i = 0;

counter = function()

i = i + add

return i

endreturn counter

endc1 = newcounter(1)

print(c1())

print(c1()) do

local oldcounter = newcounter

newcounter = function(x)

return oldcounter(2*x)

endend

c2 = newcounter(1)

print(c2())

print(c2())

輸出:1 2

2 41. lua中的函式是「第一類值」,就是說函式和整數,字串這些是一樣的,都可以儲存到變數中,看上面第一句的宣告。

2. 乙個closure就是乙個函式加上它訪問的所有「非區域性的變數」。上例中內部函式counter 的非區域性變數就是i和引數add,不管c1訪問多少次,都能取到這些非區域性變數的值。

3. 上例還展示了怎麼重新定義乙個函式,先把老函式儲存到乙個固定區域的區域性變數中,這樣外部就訪問不到這個newcounter函式了,然後重新寫新函式,新函式中可以呼叫老函式的實現。比如:上面的**就實現累計值翻倍的效果。

Lua學習之閉合函式

閉合函式 closure 看lua程式設定這本書的時候,其實感覺也就lua也就那樣,直到看到閉合函式這乙個塊 首先來說說函式,函式在lua中屬於第一類值,其實對於函式而言,function a end 和 a function end 是等價的,乙個函式的定義實際上就是一條賦值語句,這條語句首先建立...

Lua基礎學習 Lua函式

函式主要用途 1 是作為呼叫語句使用。2 作為賦值語句的表示式使用。語法 區域性 全域性 function fun name 引數列表 函式體endfunction 定義函式關鍵字注意 1 在使用 lua 函式 變數時一定要先定義函式 變數 2 lua 函式不支援引數預設值,可以使用 or 解決。如...

lua 函式深入 閉合函式,區域性函式,尾呼叫

lua函式具有兩大特徵 函式作為第一類值,函式具有特定的詞法域 lexical scoping 所謂第一類值 代表函式和其他傳統型別的值是等價的 例如數字和字串 函式可以同他們一樣儲存在變數,table中,可以作為實參傳遞,可以作為函式返回值。對於第一類值,需要講明,函式和其他值一樣都是匿名的,是沒...