定义的时候冒号默认接收self参数
调用的时候冒号默认传递调用者自己为参数
而句号要显示传递或接收self参数

-- 例如:句号定义,需要显示传递或接收

[plain]  view plain copy
  1. a = { x = 1 }
  2. function a.fun(self)
  3. print(self.x)
  4. end
  5. a.fun(a)--输出1,将a自己做为参数传给fun函数的self

这样调用要传递self,比较麻烦,所以lua给一个方便的方法
将函数定义改成冒号,就可以省略self参数

[plain]  view plain copy
  1. function a:fun()
  2. print(self.x)
  3. end
  4. a.fun(a)

将调用改成冒号,就可省略传自己进去

[plain]  view plain copy
  1. function a:fun()
  2. print(self.x)
  3. end
  4. a:fun()

最后说明一下,如果不用self,直接在函数里使用x是不行的

之前以为可以像c++类一样,成员函数可以直接使用类成员变量

[plain]  view plain copy
  1. function a:fun()
  2. print(x)--将输出nil,找不到这个x
  3. 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
然后我做了如下测试,来弄清楚冒号的用法
[cpp]  view plain copy
  1. function test()
  2. t.f()
  3. t:g()
  4. t:h()
  5. t.i()
  6. t:h()
  7. t.j(t)
  8. t:h()
  9. end
  10. t = {}
  11. function t.f()
  12. print("tf");
  13. end
  14. function t:g()
  15. self.x = 10
  16. end
  17. function t:h()
  18. print(self.x)
  19. end
  20. function t.i()
  21. t.x = 20
  22. end
  23. function t.j(k)
  24. k.x = 30
  25. end

输出:

[LUA-print] tf
[LUA-print] 10
[LUA-print] 20
[LUA-print] 30
发现冒号会提供一个内置table供function之间通信。

Lua点号和冒号区别相关推荐

  1. 关于lua中的点号与冒号的区别与使用

    关于lua中的点号与冒号的区别与使用 如果函数定义使用冒号,则默认会接受self参数,其调用时会传递调用它本身作为参数,而使用点号则不会. // 点号和冒号的用法 class={} function ...

  2. lua面向对象编程之点号与冒号的差异详细比较

    首先,先来一段在lua创建一个类与对象的代码 Class = {} Class.__index = Class function Class:new(x,y) local temp = {} setm ...

  3. Lua语言中的冒号:和点.

    lua编程中,经常遇到函数的定义和调用,有时候用点号调用,有时候用冒号调用. girl = {money = 200} function girl.goToMarket(girl ,someMoney ...

  4. 一号信令是什么?1号信令和7号信令的区别介绍!

    1号信令又称为多频互控信令或随路信令.那么,什么是一号信令?一号信令是怎么分类的?1号信令常见问题有哪些?1号信令和7号信令之间有哪些区别呢?接下来我们就跟随飞畅科技的小编一起来详细了解下吧! 一.1 ...

  5. 微信H5授权用户和公众号关注用户区别

    微信H5授权用户和公众号关注用户区别 概念H5页面访问用户是通过微信jscode获取token授权普通访问用户 公众号关注用户是关注了微信的公众号后的用户 概念上一个是普通访问用户(包括了但不限于关注 ...

  6. 订阅号和服务号有什么区别?哪种更好?企业该如何选择?

    如今微信公众号运营是企业进行网络推广的必要手段,要做好公众号运管就要充分的了解公众号.前期创建微信公众号时会让你选择公众号的类型,那么订阅号和服务号的区别是什么?企业选择哪个比较好?今天伯乐网络传媒就 ...

  7. 微信端中的企业号、订阅号、服务号之前的区别

    微信端中的企业号.订阅号.服务号之前的区别 一直在开发微信端的企业号和订阅号,却还不太清楚两者之间的区别到底在哪,以下是找的文档区别. 企业号: 面向人群:面向企业,政府.事业单位和非政府组织,实现生 ...

  8. mysql中双引号和单引号有什么区别

    mysql中双引号和单引号有什么区别 前2天看到有人问,mysql中双引号和单引号有什么区别? 希望大家可以关注下公众号,支持一下,鞠躬感谢~ 我就直接po代码和截图了,如下 select * fro ...

  9. Lua ipairs与pairs的区别

    Lua ipairs与pairs的区别 相同点和不同点 相同点 不同点: 举例说明 测试代码 测试结果分析 相同点和不同点 相同点 ipairs和pairs一般都用来对table进行遍历 不同点: i ...

最新文章

  1. 初三女生学计算机专业,江西中专初三毕业学计算机专业适宜女生吗
  2. iOS:触摸控件UITouch、事件类UIEvent
  3. js中的attribute详解
  4. pycharm如何分两页阅读_雅思高分喜报| 听力、阅读、写作突破7分,2个月轻松突破雅思总分7, 她是如何做到的?...
  5. 计算机网络第四章-网络层复习笔记
  6. 如何在GraphPad Prism中使用非线性回归拟合模型?
  7. Nuget发布Dll
  8. TechEd2010
  9. 修复ext4日志(jbd2)bug( Ext4 文件系统有以下 Bug)
  10. mojoportal升级中用户相关设置
  11. maven笔记(2)
  12. rapidsvn 安装步骤
  13. 三大运营商发5G白皮书:传统短信迎大升级 推出5G消息
  14. Java实现输出PDF
  15. 文献总结--水印图像文献调研
  16. 霍元甲被日本人用烂肺药毒死(图)
  17. 虚拟机提示:无法连接虚拟设备 sata0:1,因为主机上没有相对应的设备……
  18. 2015年SaaS细分领域部分代表公司盘点 融资额近40亿
  19. 股票 - - 常用指标【中】
  20. [华语][张国荣][16CD][1978-1987][APE+CUE][3.94G][115][sqhhj0622#HD2PT]

热门文章

  1. 实训1 分析1996~2015年人口数据特征间的关系
  2. pta7-6 英文单词排序
  3. 天下布魔服务器维护,天下布魔wiki手游
  4. R语言实现多维尺度分析(Multidimensional Scaling,MDS)
  5. 2013年中国科学院院士增选有效候选人名单
  6. DZY Loves Modification
  7. Excel系列:if、mathc、choose条件判断语法的使用
  8. 科沃斯机器人充电红灯_我新买科沃斯360款扫地机人充电一直是红灯亮
  9. 请问我接的宽带网线里面那些带颜色的线是什么顺序?
  10. MSA应用――MSA手册第四版的新亮点