Lua筆記10 非全域性函式

2021-07-04 11:23:01 字數 1798 閱讀 6898



lua中函式可以作為全域性變數也可以作為區域性變數,我們已經看到一些例子:函式作為

table

的域(大部分

lua標準庫使用這種機制來實現的比如

io.read

、math.sin

)。這種情況下,必須注意函式和表語法:

1. 表和函式放在一起

lib = {}

lib.foo = function (x,y) return x + y end

lib.goo = function (x,y) return x - y end

2.

使用表建構函式

lib =

3. lua

提供另一種語法方式

lib = {}

function lib.foo (x,y)

return x + y

endfunction lib.goo (x,y)

return x - y

end

當我們將函式儲存在乙個區域性變數內時,我們得到乙個區域性函式,也就是說區域性函式像區域性變數一樣在一定範圍內有效。這種定義在包中是非常有用的:因為lua把

chunk當作函式處理,在chunk內可以宣告區域性函式(僅僅在chunk內可見),詞法定界保證了包內的其他函式可以呼叫此函式。下面是宣告區域性函式的兩種方式:

1. 方式一

local

f = function (...)

...end

local

g = function (...)

...f()   -- external local `f' is visible here

...

end

2. 方式二

local

function f (...)

...end

有一點需要注意的是在宣告遞迴區域性函式的方式:

local fact = function (n)

if n == 0 then

return 1

else

return n*fact(n-1) -- buggy

endend

上面這種方式導致

lua編譯時遇到

fact(n-1)

並不知道他是區域性函式

fact

,lua

會去查詢是否有這樣的全域性函式

fact

。為了解決這個問題我們必須在定義函式以前先宣告:

local fact

fact = function (n)

if n == 0 then

return 1

else

return n*fact(n-1)

endend

這樣在fact

內部fact(n-1)

呼叫是乙個區域性函式呼叫,執行時

fact

就可以獲取正確的值了。

在定義非直接遞迴區域性函式時要先宣告然後定義才可以:

local f, g        -- `forward' declarations

function g ()

... f() ...

end

function f ()

... g() ...

end



LUA教程非全域性函式 22

lua中函式可以作為全域性變數也可以作為區域性變數,我們已經看到一些例子 函式作為table的域 大部分lua標準庫使用這種機制來實現的比如io.read math.sin 這種情況下,必須注意函式和表語法 1.表和函式放在一起 lib lib.foo function x,y return x y...

C C 呼叫 Lua 函式(非全域性函式)

c c 呼叫 lua 函式有兩種 1,lua 指令碼裡,沒有local 修飾的函式,即為全域性函式 2,lua 指令碼裡,有local 修飾的函式,即為區域性函式 其實呼叫函式和取lua裡的變數是一樣的,網上講得最多的是呼叫全域性函式,這裡主要講呼叫非全域性函式 或是變數 如有指令碼 test.lu...

Lua初識之非全域性函式 十二

lua初識之非全域性函式 注意 在lua中呼叫乙個函式要在呼叫之前定義,否則出錯 表和函式放在一起 lib lib.foo function x,y return x y endlib.goo function x,y return x y endprint lib.foo 3,5 8 print ...