Lua 点号与冒号
lua本身没有类功能,它的类功能是通过元表来实现的。类的函数调用通过obj:function方式。但类的成员赋值又是通过obj.var方式来实现的。翻阅lua 5.1手册,发现对于冒号只有这么一段解释。(lua 5.1手册)
冒号语法可以用来定义方法, 就是说,函数可以有一个隐式的形参 self。 因此,如下写法:
function t.a.b.c:f (params) body end
是这样一种写法的语法糖:
t.a.b.c.f = function (self, params) body end
function t.a.b.c:f (params) body end
是这样一种写法的语法糖:
t.a.b.c.f = function (self, params) body end
然后我做了如下测试,来弄清楚冒号的用法
function test()
t.f()
t:g()
t:h()
t.i()
t:h()
t.j(t)
t:h()
end
t = {}
function t.f()
print("tf");
end
function t:g()
self.x = 10
end
function t:h()
print(self.x)
end
function t.i()
t.x = 20
end
function t.j(k)
k.x = 30
end
[LUA-print] tf
[LUA-print] 10
[LUA-print] 20
[LUA-print] 30
[LUA-print] 10
[LUA-print] 20
[LUA-print] 30
发现冒号会提供一个内置table供function之间通信。