1.简单的例子
lua中的函数和c中的很相似,下面是数组累加的例子:
nums={3,321,11,23,32}
function add(a)
local sum=0
for k,v in ipairs(a) do
sum=sum+v
end
return sum
end
print(add(nums))
![](https://img-my.csdn.net/uploads/201301/17/1358391067_6778.png)
2.返回多个值
lua中的函数可以有多个返回值,下面的例子就找到最大值和它的位置。
function maximum (a)
local mi = 1
-- index of the maximum value
local m = a[mi]
-- maximum value
for i,val in ipairs(a) do
if val > m then
mi = i; m = val
end
end
return m, mi
end
print(maximum({8,10,23,12,5}))
![](https://img-my.csdn.net/uploads/201301/17/1358391557_4281.png)
可以利用这样的函数一次性给多个变量赋值,如果变量的个数多余函数的返回值个数,那么多余变量就赋值为nil,如果利用返回多个值的函数给某一个变量赋值的时候,只把函数返回的第一个值赋给变量。
还是接着上面的例子;
a,b,c=maximum({8,10,23,12,5})
d=maximum({8,10,23,12,5})
print(a,b,c,d);
运行结果是这样:
当利用没有返回值的函数对变量进行赋值的时候,就将nil赋给该变量。
当函数调用出现在一个表达式中的时候,函数只返回第一个返回值。
当用函数来构造table的时候,所有返回值都会用到。
例如
e={maximum({8,10,23,12,5})}
print(e[1],e[2])
![](https://img-my.csdn.net/uploads/201301/17/1358392706_8417.png)
可以在函数调用的时候加上一对()来确保返回值只有一个。
总之,lua会根据情况调节函数的返回值。
3.接受可变参数的函数
函授接受的参数个数可以是变化的,比如说遍历数组,在c中需要传递数组的指针和数组的大小,在lua中用...就可以了。
function add (...)
local s=0
for i,v in ipairs{...} do
s=s+v
end
return s
end
print(add(321,32,1,34,12))
这样就可以遍历数组求和了。
4.命名参数
有时候你并不一定知道函数参数的顺序,这时候使用命名参数就有很大作用了。
function sub(arg)
return (arg.first-arg.second)
end
print(sub{first=12,second=2})
![](https://img-my.csdn.net/uploads/201301/17/1358398841_3767.png)