• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

关于lua中的冒号(":")和点号(".")的区别 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
一、定义方法的区别

1、冒号定义方法,默认会接受self参数;而点号定义的时候,默认不会接受self参数

例:

(1)冒号定义

function class:test()

  --这里会接受self参数,比如

  print(self.a,self.b)

  在这里self就是class对象本身,因此不会出错

end

(2)点号定义

function class.test()

  --点号定义时,默认不会接受self参数,因此在这里用self会出错,找不到全局变量self,当然如果你把self定义成了一个全局变量的话。。。那么你赢了。。

  print(self.a,self.b)--报错,找不到全局变量self

end

二、调用方法的区别

1、冒号调用方法,会默认地将对象本身(self)传递给方法;而点号调用则不会

例1:冒号定义

function class:test()  

  print(self.a,self.b)

end

(1)冒号调用:class:test(),这时候在test方法是可以使用self的,因为默认会将self传递给test方法

(2)点号调用:class.test(),这时候在test方法中使用self就会报错了,因为self并没有被传递给test方法,那么要怎么在test方法中使用self呢?其实也简单,把class对象传递过去就好了,如:class.test(class)

例2:点号定义

function class.test()

  print(self.a,self.b)

end

(1)冒号调用:class:test(),这时会报错,这里虽然冒号调用会把self传递过去,但是点号定义方法不接受self啊,所以会报错。想要用就只能显式地接受参数了,方法重新定义一下:function class.test(self) print(self.a) end

这样,冒号调用的时候默认把对象本身传递给方法了,方法也接受了这个参数,这就对了,参数self的名字可以改变,function class.test(tt) print(tt.a,tt.b) end

(2)点号调用:class.test(),定义的时候没有接受参数,调用的时候又没有传递参数。。能成功才怪!

直接说正确方法吧:就是传什么参数就用什么参数呗。。反正没有默认参数

定义的时候,显式地接受参数

function class.test(tt)

  print(tt.a,tt.b) 

end

class.test(class)

1、冒号定义方法,默认会接受self参数;而点号定义的时候,默认不会接受self参数

例:

(1)冒号定义

function class:test()

  --这里会接受self参数,比如

  print(self.a,self.b)

  在这里self就是class对象本身,因此不会出错

end

(2)点号定义

function class.test()

  --点号定义时,默认不会接受self参数,因此在这里用self会出错,找不到全局变量self,当然如果你把self定义成了一个全局变量的话。。。那么你赢了。。

  print(self.a,self.b)--报错,找不到全局变量self

end

二、调用方法的区别

1、冒号调用方法,会默认地将对象本身(self)传递给方法;而点号调用则不会

例1:冒号定义

function class:test()  

  print(self.a,self.b)

end

(1)冒号调用:class:test(),这时候在test方法是可以使用self的,因为默认会将self传递给test方法

(2)点号调用:class.test(),这时候在test方法中使用self就会报错了,因为self并没有被传递给test方法,那么要怎么在test方法中使用self呢?其实也简单,把class对象传递过去就好了,如:class.test(class)

例2:点号定义

function class.test()

  print(self.a,self.b)

end

(1)冒号调用:class:test(),这时会报错,这里虽然冒号调用会把self传递过去,但是点号定义方法不接受self啊,所以会报错。想要用就只能显式地接受参数了,方法重新定义一下:function class.test(self) print(self.a) end

这样,冒号调用的时候默认把对象本身传递给方法了,方法也接受了这个参数,这就对了,参数self的名字可以改变,function class.test(tt) print(tt.a,tt.b) end

(2)点号调用:class.test(),定义的时候没有接受参数,调用的时候又没有传递参数。。能成功才怪!

直接说正确方法吧:就是传什么参数就用什么参数呗。。反正没有默认参数

定义的时候,显式地接受参数

function class.test(tt)

  print(tt.a,tt.b) 

end

class.test(class)


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Python导出Excel为Lua/Json/Xml实例教程(三):终极需求发布时间:2022-07-22
下一篇:
NGINX+Lua模块编译安装发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap