方法用:还是用.?方法是用冒号还是用英文的句号?lua牛逼的,能解释一下这两个符号的区别么?千万别说一样,我再用tableview的时候,注册那些代理的方法,用冒号:直接崩溃,说明没有调用
:第一个参数自动传入self
“:”只是Lua提供的一个“语法糖”,也就是一种简写。
例如:
A = {}
A.x = 0
function A.func( t )
print(“x=”, t.x)
end
A.func(A)
以上是正常语法的调用,但A.func(A)这样写太难看了,所以Lua允许简写为A:func(),即使用冒号后,默认调用函数时,表本身是隐含的第一个参数。
使用上面的简写规则,函数定义可以写为:
function A:func( )
print(“x=”, self.x)
end
可以看出,隐含的参数使用self来引用,这就是self的真正含义。使用self的时候,如果运行时报错self为nil或者是类型不对,通常是因为调用时写成了A.func()这样的形式,由于是用点来调用,就没有隐含的第一个参数,当然就出错了。
换一种解释就是 使用. 则这个方法是静态函数 和此类无关,使用:就是成员函数。
问下 lua里面的静态函数和成员函数写法的区别是什么(或者说怎么判断是一个静态还是成员)?
看2楼已经说的很清楚了,.方法是不会默认传self的 而:是会把self传过去的。