Quick-x自己的class写Lua类

方法用:还是用.?方法是用冒号还是用英文的句号?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传过去的。