lua 中冒号和点号的区别

lua 中冒号和点号的区别:

一、定义方法的区别
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
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值