您的位置:首页 > 移动开发 > Cocos引擎

Cocos2d-Lua之函数

2016-06-15 15:34 375 查看
Lua脚本语言的函数类型有很多种,不仅包括常见的无参无返回,有参无返回,有参有返回,无参有返回,默认参数,还有不定参数的情况。下面一一举个例子

--无参无返回
fun()

function fun()
print("fun()")
end


输出结果:



--有参无返回
fun(5, 6)

function fun(a, b)
print(a + b)
end


输出结果:



--有参有返回
res = fun(5, 6)
print(res)

function fun(a, b)
return a * b
end


输出结果:



--无参有返回
res = fun()
print(res)

function fun()
local a = 1
return a
end


输出结果:



--默认参数
fun()
print("----------------")
fun(1)
print("----------------")
fun(1, 2)
print("----------------")
fun(1, 2, 3)
print("----------------")
fun(nil, 1)
print("----------------")
fun(nil, nil, 1)
print("----------------")

function fun(a, b, c)
a = a or 3
b = b or 5
c = c or 7
print(a)
print(b)
print(c)
end


输出结果:



这里稍微说明一下:

以往高级语言的默认参数

fun(a = 3, b = 5, c = 7)


的行式,在Lua中必须使用

a = a or 3
b = b or 5
c = c or 7


的形式,如果尝试用以往的默认参数的形式会报错(本人亲试)。在调用带有默认参数的函数进行传参时,可以专门只传给某一个参数,只要把这个参数前面的参数值都设为nil即可(例子中已经展示的很清楚了)。

--不定参数
len = fun(1, "a", true, funa)
print(len)

function fun(...)
local a, b, c, d, e = ...
print(a)
print(b)
print(c)
print(d)
print(e)
return select("#", ...)
end


输出结果:



不定参数的函数的参数列表使用”…”表示的,并且传给多个参数,通过select函数获取传入参数的个数(select函数的格式是固定的,记住就可以了),可以明显的看到通过声明多个变量获取传入的参数是相当不明智的,因为不知道要声明多少个变量。这里就换一种方式获取传入的参数:

--不定参数
fun(1, "a", true, funa)

function fun(...)
for k, v in ipairs({...})
do
print(k, v)

end
end


输出结果:



这里用一个for循环获取传入的参数,其中k记录下标,v记录参数值,显然这样就方便了许多。

注意:

细心的话可以发现所有的例子全是用一个函数名fun,我主要为了试验Lua中的函数是否支持函数重载这么一说,后来发现最后一次声明的fun函数直接覆盖掉了之前声明的fun函数,所以说Lua并没有函数重载这么一说。

多次试验发现这个原因呢也很简单,如果对于一个函数中传入的参数不够,后面的参数的值就是nil,如果传入的参数过多,就被丢弃。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  lua