函数(子程序) 是一段可以执行的代码,他通常包含函数名,出入参数,函数体,返回值(传出参数)。他可以方便代码管理,把常用的代码写成函数方便重复利用。
内容摘要:函数 函数定义 函数调用 函数参数
函数定义:
funcname = function( [parlist1] )
funcbody
end
函数名 funcname ::= Name {'.' Name} [':'Name]
形参 parlist1 ::= namelist [`,´ `...´] | `...´
函数实例
--~ 一个简单的函数包含一些常用的基本信息
--~ 传入任意多的整数然后求和
addsum = function (a,...)
local arg={...};
local sum = a;
for i, v in ipairs(arg) do
sum = sum + v
end
if(#arg > 0) then
--返回多值
return sum,#arg
else
--返回单值
return sum
end
end
r1,r2 = addsum(1,2) --结果 3
print(r1,r2) --结果 3 nil
r1 = addsum(1,2,3,4) --结果 10
print(r1,r2) --结果 3 2
函数调用
Lua的函数调用的语法如下:
形式一:直接调用
functioncall ::= functionname '(' args ')'
函数调用的第一步是对 functionname 和args求值。 如果 functionname的值的类型是 function类型, 那么这个函数就被用给出的参数调用。 否则 functionname的元方法 "call" 就被调用(具体信息查看Metatable元表)。
形式二:方法调用
--定义为table的一个方法进行调用
functioncall ::= tablename'.'functionname '('args')'
--语法糖
functioncall ::= tablename':'functionname '('args')'
--他会程序被解释成 tablename.functionname(tablename,args)
--这里 tablename 只会被求值一次
参数传入和返回
--定义
addsum(a) return r1,r2,r3
s1,s2 = addsum(a,b)
-- 传入参数 b丢弃,传出参数 r3丢弃
s1,s2,s3,s4 = addsum(a,b,c)
-- 传入参数 b,c 丢弃,接收参数s4为nil
Lua 函数可以接受固定和可变数目的参数
- 固定参数 提供具体的参数形参名称,在函数体内直接使用。
- 可变参数 通过三个点(...) 表示,在函数体内直通过放入表{}中,然后可以通过泛型for循环 取出来使用。(参见本章示例)
- Lua函数的传入、传出参数如果没有对应的接收参数将被丢弃。