一、函数结构
1、声明
optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
function_body
return result_params_comma_separated
end
- optional_function_scope: 该参数是可选的制定函数是全局函数还是局部函数,未设置该参数默认为全局函数,如果需要设置函数为局部函数需要使用关键字 local。
- function_name: 指定函数名称。
- argument1, argument2, argument3…, argumentn: 函数参数,多个参数以逗号隔开,函数也可以不带参数。参数的行为与局部变量的行为完全一致(可以通过下面的例子体会)。
- function_body: 函数体,函数中需要执行的代码语句块。
- result_params_comma_separated: 函数返回值,Lua 语言函数可以返回多个值,每个值以逗号隔开。
入参的行为
print("参数局部变量:")
function params(a, b)
print("函数内部,未改变值:", a, b) --> 函数内部,未改变值: 1 2
a = 10
b = 100
print("函数内部,未改变值:", a, b) --> 函数内部,未改变值: 10 100
end
local a = 1
local b = 2
print("入参前:", a, b) --> 入参前: 1 2
params(a, b)
print("入参后:", a, b) --> 入参后: 1 2
2、使用
函数的调用和 java 、 kotlin 没有区别
只是如果函数只有一个参数,且该参数类型是 字符串常量 或是 表构造器 ,则括号是可选,只需隔开一个空格。
-- 等同于 print("function")
print "function" --> function
-- 等同于 dofile("字符串.lua")
dofile "字符串.lua"
-- 等同于 type({})
print(type {
}) --> table
二、入参
1、入参个数
参数个数没有规定一定要和函数声明的个数一致,多余会被抛弃,不足参数会被设置为 nil .
function multiParams(p1, p2, p3, p4, p5)
print(p1, p2, p3, p4, p5)
end
multiParams() --> nil nil nil nil nil
multiParams(1) --> 1 nil nil nil nil
multiParams(1, 2) --> 1 2 nil nil nil
multiParams(1, "jiang", 2) --> 1 jiang 2 nil nil
multiParams(1, "jiang", 2, "peng") --> 1 jiang 2 peng nil
multiParams(1, "jiang", 2, "peng", 3) --> 1 jiang 2 peng 3
multiParams(1, "jiang", 2, "peng", 3, "yong") --> 1 jiang 2 peng 3
可以利用这一特性,加上 a or 默认值
达到默认值
local globalCounter = 0
function initGlobal(n)
n = n or 1
globalCounter = globalCounter + n;
end
initGlobal()
print(globalCounter) --> 1
initGlobal(10086)
print(globalCounter