Cocos2d-Lua之函数
来源:互联网 发布:钓鱼软件qq盗号 编辑:程序博客网 时间:2024/05/30 04:17
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 * bend
输出结果:
--无参有返回res = fun()print(res)function fun() local a = 1 return aend
输出结果:
--默认参数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 3b = b or 5c = 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) endend
输出结果:
这里用一个for循环获取传入的参数,其中k记录下标,v记录参数值,显然这样就方便了许多。
注意:
细心的话可以发现所有的例子全是用一个函数名fun,我主要为了试验Lua中的函数是否支持函数重载这么一说,后来发现最后一次声明的fun函数直接覆盖掉了之前声明的fun函数,所以说Lua并没有函数重载这么一说。
多次试验发现这个原因呢也很简单,如果对于一个函数中传入的参数不够,后面的参数的值就是nil,如果传入的参数过多,就被丢弃。
0 0
- Cocos2d-Lua之函数
- Cocos2d-Lua之赋值
- Cocos2d-Lua之table
- Cocos2d-Lua之string
- Cocos2d-Lua之随机数
- cocos2d-x lua之 lua函数中有内部函数的错误
- 【cocos2d-x + lua】生命周期函数
- 小羊驼和你一起学习cocos2d-x与lua之三(lua匿名函数)
- [寒江孤叶丶的Cocos2d-x之旅_20]Lua字符串分割函数分享,Lua StringSplit
- Cocos2d-x 之Lua初学
- Cocos2d-X之LUA笔记
- Cocos2d-Lua之运算符
- Cocos2d-Lua之循环语句
- Cocos2d-Lua之math库
- Cocos2d-Lua之文件操作
- Cocos2d-Lua之异常处理
- Cocos2d-Lua之协同程序
- Cocos2d-Lua之闭包
- Java web项目中读取properties,xml文件
- Android取消沉浸式状态栏
- 【Android】Android Camera实时数据采集及通过MediaCodec硬编码编码数据的流程
- Python学习笔记 20160615
- C#点击只打开一个窗体
- Cocos2d-Lua之函数
- uname命令的使用方法
- Akka学习笔记:Actor消息传递(1)
- 【leetcode】232. Implement Queue using Stacks
- 订阅模式(publish-subscribe)
- linux 容器(LXC) 第1章 LXC 简介
- vue 学习记录
- struts form样式怎么修改
- JAVA I/O流