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 ...