01:在 Lua 中,函数是被看作是"第一类值(First-Class Value)",函数可以存在变量里:
函数是一种数据类型
function sum(n)
if n==1 then
return 1
else
return n*sum(n-1)
end
end
a=sum(5)
b=a
print(a)
print(b)
函数做为数据类型传递
02:function 可以以匿名函数(anonymous function)的方式通过参数传递
function sum(table1,test)
for k,v in pairs(table1) do
test(k,v)
end
end
table2={4,58,86,68,5}
function test2(k,v)
print(k..":"..v)
end
sum(table2,test2)
--匿名函数
sum(table2,
function (k,v) print(k..""..v)
end)
Lua函数可以返回多个结果值,比如string.find,其返回匹配串"开始和结束的下标"(如果不存在匹配串返回nil)
a,b=string.find("www.runoob.com", "runoob")
print(a,b)
5 10
在return后列出要返回的值的列表即可返回多值
functionmaximum(a)
localmi=1-- 最大值索引
localm=a[mi]-- 最大值
fori,valinipairs(a)do
ifval>mthen
mi=i
m=val
end
end
returnm,mi
end
print(maximum({8,10,23,12,5}))
23 3
Lua 函数可以接受可变数目的参数,和 C 语言类似,在函数参数列表中使用三点 …表示函数有可变的参数。
function add(...)
s=0
for k,v in pairs{...} do
s=s+v
end
return s
end
sun=add(100,500,400)
print(sun)
1000
我们可以将可变参数赋值给一个变量
function add(...)
result=0
local table1 ={...}
for k,v in pairs(table1) do
result=result+v
end
print("平均值无为:",result/#table1)
print("长度为:",#table1)
end
add(4,5,8,9)
平均值无为:6.5
长度为:4
我们也可以通过 select("#",…) 来获取可变参数的数量
function average(...)
result = 0
local arg={...}
for i,v in ipairs(arg) do
result = result + v
end
print("总共传入 " .. select("#",...) .. " 个数")
return result/select("#",...)
end
print("平均值为",average(10,5,3,4,5,6))
总共传入 6 个数
平均值为5.5
a=select("#",25,888,8)
print(a)
3