函式:
函式有兩種用途:1.
完成指定的任務,這種情況下函式作為呼叫語句使用;
2.計算並返回值,這種情況下函式作為賦值語句的表示式使用。
語法:function func_name (arguments-list)
statements-list ;
end ;
呼叫函式的時候,如果引數列表為空,必須使用()表明是函式呼叫。
但是,這個規則有乙個例外,當函式只有乙個引數並且這個引數是字串或者表構造的時候,()是可選的。
lua也提供了物件導向方式呼叫函式的語法,比如:
o:foo(x)
與o.foo(x)
是等價的。
lua使用的函式可以使
lua編寫的也可以使其他語言編寫,對於
lua程式設計師來說用什麼語言實現的函式使用起來都一樣。
lua函式實參和形參的匹配與賦值語句類似,多餘部分被忽略,缺少部分用
nil補足
返回多個結果值
lua函式可以返回多個結果值,比如
string.find
,其返回匹配串「開始和結束的下標,如果不存在匹配串則返回
nil」
s,e = string.find("hello lua users","lua") ;
print(s,e)
在lua
函式中,在
return
後列出要返回的值得到列表即可返回多值。
function maximum(a)
local mi = 1
local m = a[mi]
for i,val in ipairs(a) do
if val > m then
mi = i
m = val
endend
return m,mi
endprint(maximum())
lua總是調整函式返回值的個數去適應呼叫環境,當做為乙個語句呼叫函式時,所有返回值被忽略。
當做為表示式呼叫的時候,有以下幾種情況:
1.當呼叫作為表示式最後乙個引數或者僅有乙個引數時,根據變數個數盡可能多的返回多個值,不足補nil
,超出捨去。
2.其他情況,函式呼叫僅返回乙個值(如果沒有返回值為nil)
函式呼叫作為函式引數被呼叫的時候和多值賦值是相同的。
函式呼叫在表建構函式中初始化,和多值賦值時相同。
另外,return f()
這種型別的返回
f()返回的所有值
可以使用圓括號強制使呼叫返回乙個值
乙個return
語句如果使用圓括號括起來也將導致返回乙個值。
function foo0 () end
function foo1() return 1 end
function foo2() return 2,3 end
x,y = foo2()
print(x,y)
x,y = nil ,nil
x = foo2()
print(x,y)
x,y,z = nil,nil,nil
x,y,z = 10,foo2()
print(x,y,z)
x,y,z = nil
x,y = foo0()
print(x,y)
x,y,z = nil
x,y = foo1()
print(x,y)
x,y,z = nil
x,y,z = foo2()
print(x,y,z)
x,y,z = nil
x,y,z = 20,foo2()
print(x,y,z)
x,y,z = nil
x,y = foo0(),20,30
print(x,y)
print(foo0())
print(foo1())
print(foo2())
print(foo2(),1)
print(foo2() .. "x")
a =
a =
a =
a =
function foo(i)
if i == 0 then return foo0()
elseif i == 1 then return foo1()
elseif i == 2 then return foo2()
endendprint(foo(1))
print(foo(2))
print(foo(0))
print(foo(3))
print((foo(0)))
print((foo(1)))
print((foo(2)))
Lua學習筆記05 深入函式 一
一 lua中函式也為第一類值 函式也可以儲存到變數 table中 它可以作為實參傳遞給其他函式,也可以作為其他函式的返回值 詞法域 乙個函式可以巢狀到另乙個函式中,內部的函式可以訪問外部函式的變數 函式與其他值一樣都是匿名的,lua中的函式只是乙個持有某函式方法的變數,函式名類似於變數名,我們也可以...
Lua學習筆記 lua堆疊
首先了解一下c 與lua之間的通訊 假設在乙個lua檔案中有如下定義 hello.lua檔案 請注意紅色數字,代表通訊順序 1 c 想獲取lua的myname字串的值,所以它把myname放到lua堆疊 棧頂 以便lua能看到 2 lua從堆疊 棧頂 中獲取myname,此時棧頂再次變為空 3 lu...
lua學習筆記
近日時間比較充裕,學習一下lua語言,順便寫下筆記,方便以後加深學習。c c 呼叫lua動態庫及標頭檔案位址 用於c c 嵌入lua指令碼解析 也可以到或找適合自己的版本。一 hello world 哈哈,先使用經典的hello world帶進門 1.在 執行 鍵入cmd開啟dos視窗,並將當前目錄...