Lua:能否在表构造器内定义带冒号语法糖的函数?有无替代写法?
Lua表构造器与冒号语法糖的常见问题
问题1:能否在Lua的表(table)内部定义使用冒号语法糖(colon syntactic sugar)的函数?
不行。Lua的冒号语法糖仅支持在表外部定义函数时使用(例如function Account:new(...)这种形式),在表构造器内部没有对应的语法可以直接用冒号声明带隐式self的函数,必须显式写出self参数。
问题2:针对以下Lua代码:
Account = {} function Account:new (o) o = o or {} setmetatable(o, self) self.__index = self return o end
是否存在替代语法,可将new方法直接放入Account的表构造器中,同时让函数拥有隐式的self变量?还是必须使用显式的self参数(或等效写法),采用如下方式实现?
Account = { new = function (self, o) o = o or {} setmetatable(o, self) self.__index = self return o end }
必须使用显式self参数的写法,也就是你给出的第二种实现方式。Lua的表构造器中,键值对里的函数只能用普通的function(...)语法,无法直接用冒号语法糖自动注入self。手动把self作为第一个参数写进去,和外部用冒号定义的效果完全一致——因为冒号语法本质上就是Lua帮你自动把表本身作为第一个参数self传入的语法糖,显式写self只是还原了它的底层逻辑。
内容的提问来源于stack exchange,提问作者DrDreadful
相关产品推荐
相关产品推荐

