Lua点号和冒号区别【转】
来源:互联网 发布:java备份mysql数据库 编辑:程序博客网 时间:2024/05/09 03:34
来自:http://blog.csdn.net/stormbjm/article/details/38532413
定义的时候冒号默认接收self参数
调用的时候冒号默认传递调用者自己为参数
而句号要显示传递或接收self参数
-- 例如:句号定义,需要显示传递或接收
- a = { x = 1 }
- function a.fun(self)
- print(self.x)
- end
- a.fun(a)--输出1,将a自己做为参数传给fun函数的self
将函数定义改成冒号,就可以省略self参数
- function a:fun()
- print(self.x)
- end
- a.fun(a)
- function a:fun()
- print(self.x)
- end
- a:fun()
最后说明一下,如果不用self,直接在函数里使用x是不行的
之前以为可以像c++类一样,成员函数可以直接使用类成员变量
- function a:fun()
- print(x)--将输出nil,找不到这个x
- end
lua本身没有类功能,它的类功能是通过元表来实现的。类的函数调用通过obj:function方式。但类的成员赋值又是通过obj.var方式来实现的。翻阅lua 5.1手册,发现对于冒号只有这么一段解释。(lua 5.1手册)
冒号语法可以用来定义方法, 就是说,函数可以有一个隐式的形参 self。 因此,如下写法:
function t.a.b.c:f (params) body end
是这样一种写法的语法糖:
t.a.b.c.f = function (self, params) body end
function t.a.b.c:f (params) body end
是这样一种写法的语法糖:
t.a.b.c.f = function (self, params) body end
然后我做了如下测试,来弄清楚冒号的用法
- function test()
- t.f()
- t:g()
- t:h()
- t.i()
- t:h()
- t.j(t)
- t:h()
- end
- t = {}
- function t.f()
- print("tf");
- end
- function t:g()
- self.x = 10
- end
- function t:h()
- print(self.x)
- end
- function t.i()
- t.x = 20
- end
- function t.j(k)
- k.x = 30
- end
[LUA-print] tf
[LUA-print] 10
[LUA-print] 20
[LUA-print] 30
[LUA-print] 10
[LUA-print] 20
[LUA-print] 30
发现冒号会提供一个内置table供function之间通信。
0 0
- Lua点号和冒号区别【转】
- Lua点号和冒号区别
- Lua点号和冒号区别
- Lua点号和冒号区别
- Lua点号和冒号区别
- lua 点号"."和冒号":"、"seif"使用及区别
- Lua中调用函数使用点号和冒号的区别
- Lua中调用函数使用点号和冒号的区别
- lua 中点号与冒号的区别
- lua中冒号(:)与点号(.)的区别
- Lua中点号与冒号的区别
- Lua 点号与冒号
- lua面向对象编程之点号与冒号的区别
- lua面向对象编程中冒号与点号的区别
- lua 点号与冒号操作符的区别
- Lua点号(英文句号)与冒号的区别
- 点号(.)和双冒号(::)在方法调用中的区别
- lua ipairs与 pairs ,冒号,点号 实例
- cocos2dx新手打包问题
- Runloop加载本地大图
- 工作中Django总结之三(模板标签)
- PAT(乙) 1007. 素数对猜想 (20)
- windows上运行Pyzip (Z/IP Client)的一个小错误
- Lua点号和冒号区别【转】
- qduoj 104 棋盘里的数学(记忆化搜索)
- const关键字的几种常用用法
- cocos2d-x 提升篇 (15) demo大致描述的功能介绍
- Revit摆脱基于线的族修改起终点时自动连接功能导致的不必要联动方法
- 解决DB2数据库报 "SQL1032N 未发出启动数据库管理器的命令“错误
- Hibernate学习随笔
- 优化篇-图片浏览
- 注解:认识注解、注解的分类、注解的生命周期、自定义注解及反射调用、为注解添加属性