在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
函数声明: function foo(arguments) statements end
1、函数调用
调用函数的时候,如果参数列表为空,必须使用()表明是函数调用,例如: os.date()
当函数只有一个参数并且这个参数是字符串或者table构造器的时候,可以省略函数调用操作符"()",例如: print "Hello World" dofile "a.lua" f{x=10,y=20}
面向对象方式调用函数的语法,例如: 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
2、多返回值假设有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' end print(select(1, foo3())) -- a b c print(select(2, foo3())) -- a b print(select(3, foo3())) -- a print(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 = {foo0()} -- a={}, a is empty a = {foo2()} -- a={a,b} a = {foo0(),foo1(),foo2(),4} -- a={nil,a,a,b,4}
函数调用作为函数参数被使用时: print (foo0()) -- print (foo1()) -- a print (foo2()) -- a b print (foo2() .. 'x') -- ax 可以使用圆括号"()"强制使调用只返回一个值: print ((foo0())) -- nil print ((foo1())) -- a print ((foo2())) -- a
unpack 函数接受一个数组作为输入参数,并返回数组的所有元素。 a={"england",960,"china",30, x="america"} print(unpack(a)) -- england 960 china 30 上面的print函数可以打印可变参数。
2、可变参数在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={n=0} g(3,4) -- a=3, b=4, arg={n=0} g(3,4,5,8) -- a=3, b=4, arg={5,8,n=2} 如上面所示,Lua会将前面的实参传给固定参数,后面的实参放在arg表中。
|
请发表评论