lua學習筆記05

2021-09-30 11:10:03 字數 2418 閱讀 3711

函式:

函式有兩種用途: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視窗,並將當前目錄...