函数通过以下格式声明:
function 函数名
语句块
return 结果
end
结果可以是一个,下面函数计算最大值:
function maxnum(nums)
maxnum=nil
for i,v in ipairs(nums) do
if(maxnum==nil) then
maxnum=v
elseif (v>maxnum) then
maxnum=v
end
end
return maxnum
end
print(maxnum ({20,19,-23,44,68}))
dp@dp:~ % lua test2.lua
68
dp@dp:~ %
也可以是多个,下面函数同时返回最小和最大值:
dp@dp:~ % vim test.lua
function maxminnum(nums)
maxnum=nil
minnum=nil
for i,v in ipairs(nums) do
if(maxnum==nil) then
minnum=v
maxnum=v
end
if (v>maxnum) then
maxnum=v
end
if (v<minnum) then
minnum=v
end
end
return maxnum,minnum
end
print(maxminnum ({20,19,-23,-44,68,21,-80}))
dp@dp:~ % lua test.lua
68 -80
unpack将table中的元素一个个提取出来。
比如:
> a={11,22,33}
> print(a)
table: 0x28428ec0
> print(a[0],a[1],a[3])
nil 11 33
> print(a[1],a[2],a[3])
11 22 33
> x=a
> print(x)
table: 0x28428ec0
> print(x[1],x[2],x[3])
11 22 33
> y1,y2,y3=unpack(a)
> print(y1..y2..y3)
112233
> print(y1)
11
> print(y2)
22
> print(y3)
33
可以通过“...”向函数传递多个参数
dp@dp:~ % vim test.lua
function maxminnum(...)
maxnum=nil
minnum=nil
for i,v in ipairs{...} do
if(maxnum==nil) then
minnum=v
maxnum=v
end
if (v>maxnum) then
maxnum=v
end
if (v<minnum) then
minnum=v
end
end
return maxnum,minnum
end
print(maxminnum (20,19,-23,-44,68,21,-80))
dp@dp:~ % lua test.lua
68 -80
通过传送table,并指定参数名称,达到指定实参的效果
dp@dp:~ % vim test.lua
function xllen(nums)
x=nums.x
y=nums.y
z=nums.z
return math.sqrt(x*x+y*y+z*z)
end
print(xllen{x=10,y=-9,z=5})