lua 点跟冒号的区别
来源:互联网 发布:关于网络诈骗的案例 编辑:程序博客网 时间:2024/04/27 13:35
定义的时候冒号默认接收self参数
调用的时候冒号默认传递调用者自己为参数
而句号要显示传递或接收self参数
-- 例如:句号定义,需要显示传递或接收
- a = { x = 1 }
- function a.fun(self)
- print(self.x)
- end
- a.fun(a)--输出1,将a自己做为参数传给fun函数的self
这样调用要传递self,比较麻烦,所以lua给一个方便的方法
将函数定义改成冒号,就可以省略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点和冒号区别
- lua 的 冒号和点的用法
- lua点和冒号的作用
- Lua-面向对象中函数使用时冒号(:)和点(.)的区别
- lua 中点和冒号的区别
- lua 中点号与冒号的区别
- lua中冒号(:)与点号(.)的区别
- Lua中点号与冒号的区别
- lua方法点(.)调用和冒号(:)调用区别:
- Lua 的冒号
- Lua点号和冒号区别
- Lua点号和冒号区别
- Lua点号和冒号区别
- 海马汽车经销商管理系统技术解析(十六)入库修改
- C++ 鼠标模拟程序
- 面试题6:使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变
- Spring2.5学习3.4_让Spring自动扫描和管理Bean
- 黑马程序员——IO流:字节流,字符流及键盘录入
- lua 点跟冒号的区别
- WCF医院管理系统技术解析(六)体检登记(五)对病人设置体检项目
- hdu 1506 Largest Rectangle in a Histogram 单调栈
- HDU Strange fuction(二分+精度控制)
- 最长回文字串的提取(相当精简!)
- 解决CDLinux在笔记本电脑上启动花屏问题
- MSDK的接入心得!!抓狂中。。。。。
- 在github上关注的开源游戏服务器引擎
- lua递归函数的编写,为了解决一个游戏当中遇到的复杂问题