Cocos2d-Lua之函数
2016-06-15 15:34
375 查看
Lua脚本语言的函数类型有很多种,不仅包括常见的无参无返回,有参无返回,有参有返回,无参有返回,默认参数,还有不定参数的情况。下面一一举个例子
输出结果:
输出结果:
输出结果:
输出结果:
输出结果:
这里稍微说明一下:
以往高级语言的默认参数
的行式,在Lua中必须使用
的形式,如果尝试用以往的默认参数的形式会报错(本人亲试)。在调用带有默认参数的函数进行传参时,可以专门只传给某一个参数,只要把这个参数前面的参数值都设为nil即可(例子中已经展示的很清楚了)。
输出结果:
不定参数的函数的参数列表使用”…”表示的,并且传给多个参数,通过select函数获取传入参数的个数(select函数的格式是固定的,记住就可以了),可以明显的看到通过声明多个变量获取传入的参数是相当不明智的,因为不知道要声明多少个变量。这里就换一种方式获取传入的参数:
输出结果:
这里用一个for循环获取传入的参数,其中k记录下标,v记录参数值,显然这样就方便了许多。
注意:
细心的话可以发现所有的例子全是用一个函数名fun,我主要为了试验Lua中的函数是否支持函数重载这么一说,后来发现最后一次声明的fun函数直接覆盖掉了之前声明的fun函数,所以说Lua并没有函数重载这么一说。
多次试验发现这个原因呢也很简单,如果对于一个函数中传入的参数不够,后面的参数的值就是nil,如果传入的参数过多,就被丢弃。
--无参无返回 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中的表的概念及其相关操作方法
- Lua编程示例(二):面向对象、metatable对表进行扩展
- 把Lua编译进nginx步骤方法
- Lua脚本自动生成APK包
- Lua中的元表(metatable)、元方法(metamethod)详解
- Lua中的metatable介绍
- Lua中ipair和pair的区别
- Lua中的函数精讲笔记
- 浅谈Lua的面向对象特性
- 详解Lua中的变量相关知识点
- Lua脚本语言入门笔记
- Lua脚本调用外部脚本
- 详解Lua中的if语句的使用方法
- Lua中调用函数使用点号和冒号的区别
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中强大的元方法__index详解
- Lua中调用C++函数示例
- Lua面向对象之类和继承浅析
- Lua性能优化技巧(一):前言
- Lua中获取table长度问题探讨