在我看来函数就是一个很小的封装,使用者只需得到函数的结果,无需关心函数内部的结构以及执行逻辑。
函数的任务:①计算和处理数据 ②返回数据
Lua函数的结构:
optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
function_body
return val
end
其中:optional_function_scope代表函数的类型,通常情况下没有标明,Lua里面默认的属性是全局,变量也是,如果要把函数声明成局部的,就需要在optional_function_scope位置写上关键字:local
function_name:函数的名字
val:为函数的返回值,Lua中返回值可以是多个
例子:返回两个参数中的最大值
function Max(num1,num2)
if (num1 < num2) then
return num2
else
return num1
end
end
print(Max(1,2))
print(Max(3,3))
输出结果:
我们也可以将函数当做参数,如下:
function myprint(num)
print("Max number is:"..num)
end
function Max(num1,num2,function_fun)
if (num1 < num2) then
result = num2
else
result = num1
end
function_fun(result)
end
print(Max(1,2,myprint))
print(Max(3,3,myprint))
运行结果:
多返回值参数
Lua中的函数可以一次返回多个返回值,
例子:返回表中的第一个数值等于3的元素
table1 = {1,2,3,4,5}
function fun(table)
for k,v in pairs(table) do
if v == 3 then
return k,v
end
end
end
print(fun(table1))
运行结果:
可变参数的函数
和C语言中的语法规则类似,可变参数使用"..."来表示,比如我们现在要计算所有参数的和值
function Add(...)
local s = 0
for i,v in pairs{...} do --表示由所有变长参数构成的一个数组
s = s+v
end
return s
end
print(Add(1,2,3,4,5,6,7,8,9))
运行结果:
将我们上一个函数简单的修改们就能写出求参数的平均数的一个函数:
function Add(...)
local s = 0
local Temptab = {...} --将所有的参数都填写到这个临时的表中
for i,v in ipairs(Temptab) do
s = s+v
end
return s/#Temptab
end
print(Add(1,2,3,4,5,6,7,8,9))
运行结果: