天天看点

05:function函数的用法

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      
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      

继续阅读