我是靠谱客的博主 干净绿草,最近开发中收集的这篇文章主要介绍关于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)

 

转载于:https://www.cnblogs.com/flxds/p/5634055.html

最后

以上就是干净绿草为你收集整理的关于lua中的冒号(":")和点号(".")的区别的全部内容,希望文章能够帮你解决关于lua中的冒号(":")和点号(".")的区别所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部