Lua函式之一

2021-08-01 20:49:12 字數 2781 閱讀 3580

呼叫函式的時候,如果引數列表為空,必須使用()表明是函式呼叫,例如:

os.date()
當函式只有乙個引數並且這個引數是字串或者table構造器的時候,可以省略函式呼叫操作符"()",例如:

print

"hello world

"dofile

"a.lua

"f

物件導向方式呼叫函式的語法,例如:

obj::foo(x)   

obj.foo(obj, x)

實參和形參結合時,多餘部分被忽略,不足補充nil,例如:

function f(a,b) return a or b end

f(3)   --

a=3, b=nil

f(3,4)    --

a=3, b=4

f(3,4,5)    --

a=3, b=4, 5 is discarded

假設有3個函式:

function foo0() end

function foo1() return'a

'end

function foo2() return'a

', 'b'

end

如果只想接收指定的返回值,可以使用啞元(dummy variable),例如:

_,x = foo2()

print(x)    -- 'b'

另一種方式是使用select函式:

select(index, ...),返回所有》=index的引數;當index='#',返回引數個數

function foo3() return'a

', '

b', 'c'

endprint(select(1, foo3())) --

a b c

print(select(2, foo3())) --

a bprint(select(3, foo3())) --

aprint(select('

#', foo3())) --

3

在表示式中呼叫函式時:

1、當函式呼叫作為表示式最後乙個引數(或僅有乙個引數)時,函式盡可能多地返回多個值,不足補nil,超出捨去;

2、其他情況下,函式呼叫僅返回第乙個值(如果沒有返回值為nil);

x,y=foo2()            --

x='a',y='b'

x=foo2()     --

x='a', 'b' is discarded

x,y,z=10,foo2()    --

x='10',y='a',z='b'

x,y=foo0()    --

x=nil,y=nil

x,y=foo1()    --

x='a', y=nil

x,y,z=foo2()    --

x='a', y='b',z=nil

x,y=foo2(),20

--x='a',y=20

x,y=foo0(),20,30

--x=nil,y=20, 30 is discarded

x,y,z=foo0(),foo2() --

x=nil,y='a',z='b'

函式呼叫在table構造器中使用時:

a =         --

a={}, a is empty

a = --

a=a = --

a=

函式呼叫作為函式引數被使用時:

print (foo0())      --

print (foo1()) --

aprint (foo2()) --

a bprint (foo2() .. '

x') --

ax

可以使用圓括號"()"強制使呼叫只返回乙個值:

print ((foo0()))      --

nilprint ((foo1())) --

aprint ((foo2())) --

a

unpack 函式接受乙個陣列作為輸入引數,並返回陣列的所有元素。

a=

print(unpack(a)) --

england 960 china 30

上面的print函式可以列印可變引數。

在lua中,使用 ... 表示可變引數,在函式中可變引數會存放在arg的乙個table中,它有乙個域n表示引數個數。

function g(a,b,...)

result = ""

for i,v in

ipairs(arg) do

result = result .. tostring(v) .. '\t'

end result = result .. '\n'

end

g(3) --

a=3, b=nil, arg=

g(3,4) --

a=3, b=4, arg=

g(3,4,5,8) --

a=3, b=4, arg=

如上面所示,lua會將前面的實參傳給固定引數,後面的實參放在arg表中。

lua入門之一函式

1 函式 2function max num1,num2 3if num1 num2 then 4 result num1 5else 6 result num2 7end 8return result 9end 1011 print max 1,150 max 1,150 1213 14 lua ...

lua菜鳥教程 LUA學習之一 初次接觸

對於乙個開源工程,開始學習它的第一步自然是編譯工程。使用vc編譯lua,在網上已有許多介紹,但 紙上得來終覺淺 自己走一遍還是有必要的。步驟如下 2.開啟vc建立乙個solution,就叫lua.sln 3.建立乙個名為liblua的project lua庫 新增除lua.c和luac.c以外的所有...

Lua原始碼解析之一 lexical

我們知道,任何高階一點的編譯器,在解析源 時,都需要進行詞法分析。而詞法分析的過程就是先識別token的乙個過程,總體來說,lua裡面的token大致分為 1.數字和字串 2.特殊字元 包括運算子和括號 對於每一類token lua都有唯一的id與之對應,此id用int來表示,對於第2種型別,直接用...