Lua的函数可以返回多个结果,假设有这么几个函数:
1 2 3
| function foo0() end function foo1() return "a" end function foo2() return "a", "b" end
|
#多重赋值
多重赋值时,Lua是尽量匹配,匹配不上的用nil补充:
1 2 3 4 5 6 7
| x,y = foo2() x = foo2() x,y,z = 10,foo2() x,y = foo0() x,y = foo1() x,y,z = foo2() x,y = foo2(), 20
|
#传入参数
函数作为别的函数调用的传入参数时,也是尽量匹配,不行则将返回值数量调整为1:
1 2 3 4 5
| print(foo0()) print(foo1()) print(foo2()) print(foo2(), 1) print(foo2() .. "x")
|
#table构造式
table构造式,看函数调用是否是最后一个元素:
1 2 3 4
| t = {foo0()} t = {foo1()} t = {foo2()} t = {foo0(), foo2(), 4}
|
#return语句
return语句中,函数能返回所有的返回值。
函数调用若处在一对圆括号中,将只返回一个结果:
1 2 3
| print((foo0())) print((foo1())) print((foo2()))
|
#unpack函数
1
| print(unpack{10, 20, 30})
|
unpack一个重要用途就是用于generic call。
unpack是用C编写的预定义函数,但是也可以在Lua中用递归实现:
1 2 3 4 5 6
| function unpack (t, i) i = i or 1 if t[i] then return t[i], unpack(t, i + 1) end end
|