例子
1 | local _M = {} |
output1
2
3
4
5 lua test.lua
a b
a b
table: 0x180ab20 a
b nil
正常调用没有问题,交叉调用结果看起来非常奇怪。
语法糖
: 其实是 . 的语法糖,默认传了一个self参数到函数内,代表table自己,相当于“ . + self =”,下面两种声明是完全等价的1
2
3
4
5
6
7
8
9function _M.test(self, a, b, ..)
-- self 需要手动声明
print(self.a)
end
function _M:test(a, b, ...)
-- 默认有 self 变量代表自己,可直接使用
print(self.a)
end
交叉调用,调用方法需依据上文的“等价转换”,转换为声明的格式
若通过:方式调用 . 声明函数,则在所有参数的前面加上一个 self1
m:print("a", "b") => m.print(self, "a", "b")
output1
table: 0x180ab20 a
若通过.方式调用.声明函数,第一个参数”a”,将被当作self,被省略,后续参数被正常传入1
m.echo("a", "b") => m:echo("b")
output1
b nil