语法:
function func_name (arguments-list)
statements-list
end
返回多个数:
1.当作为表达式调用函数时,作为最后一个参数或者仅有的一个参数时,根据变量个数,尽可能多的返回多个值,不足的补nil,超出就丢弃。其他情况,函数返回第一个值。
function test()
return 2,3,4,5
end
-- 作为仅有的参数,返回多个值
x,y=test()
print(x,y)
-- 作为最后一个参数,返回多个值
x,y,z=10,test()
print(x,y,z)
-- 一般情况,函数返回一个值
x=test()
print(x)
2.作为函数参数调用的时候,和多值赋值是相同的。可以用参数_占位来代替函数,就比较容易理解了。
function test()
return 2,3
end
-- 输出:2 3
print(test())
-- 输出:test 2 3
print("test:",test())
-- 输出:2 test
print(test(),"test")
3.在表构造函数中初始化的时候,也和多值赋值相同。
function test()
return 2,3
end
t={test()}
-- 输出:2 3
print(t[1],t[2])
t={test(),"test"}
-- 输出:2 test
print(t[1],t[2])
t={"test",test()}
-- 输出:2 3
print(t[2],t[3])
给出一个求最值的实例:
--返回表数据的最值
function mostvalue(a)
local max
local min
for i,val in ipairs(a) do
--初始化
if i==1 then
max,min=val,val
end
--判断
if val>max then
max=val
elseif val <min then
min=val
end
end
return max,min
end
local m={7,2,3,5}
print(mostvalue(m))
可变参数:
使用3点(...)表示函数有可变的参数,放在arg表中。arg表中,带有域n表示参数的个数。
1.全为可变参数:
-- 输入的参数数目可变
function myprint(...)
for i,v in ipairs(arg) do
print(i,arg[i])
end
end
myprint(1)
myprint(1,2)
2.带固定参数和可变参数:
-- 固定参数:a
function myprint(a,...)
print("a:",a)
for i,v in ipairs(arg) do
print("arg:",i,v)
end
end
myprint(10,2)
myprint(10,2,3)