Lua中能否将独立定义的函数赋值为对象方法并访问self?
Lua相关问题解答
结论:你给出的示例代码无法直接得到预期结果,仅需做极小的调整即可实现需求。
核心规则说明
Lua的冒号方法调用本质是语法糖,运行逻辑如下:
- 用
:调用表的函数时,Lua会自动把当前调用的表作为第一个隐式参数传入被调用函数,Lua通用约定这个隐式参数的变量名为self - 独立定义的外部函数只要显式把
self声明为第一个参数,赋值给表作为方法后,用:调用就能正常访问对象的属性
修改后的可运行代码
SomeObject = {name = "Jack"} -- 唯一改动:给外部函数显式声明第一个参数为self function someExternalFunction(self) print(self.name) end SomeObject.someMethodName = someExternalFunction SomeObject:someMethodName() --> 正常打印输出 "Jack"
补充说明
- 你也可以不用
:调用,手动传入对象作为第一个参数,运行效果完全一致:SomeObject.someMethodName(SomeObject)同样会输出Jack - 第一个参数的名字不强制要求为
self,这只是Lua的通用编码约定,你改成其他名称比如obj,函数内用obj.name访问也能正常运行,只是不符合通用编码习惯
内容的提问来源于stack exchange,提问作者Eggon
相关产品推荐
相关产品推荐

