Lua中Vector3类函数返回值异常问题排查求助
Lua Vector3类参数错位问题排查与修复
问题原因
你定义Vector3:new时使用了冒号语法,这种语法会自动将调用时的第一个参数绑定为self。但你调用构造函数时用的是Vector3.new(1,2,3)(点语法),导致参数完全错位:
- 原
self参数被赋值为1 - 原
x参数被赋值为2 - 原
y参数被赋值为3 - 原
z参数为nil
这就解释了为什么vec1:printX()返回2、返回y得到3、返回z为nil的现象。
修复方案
有两种方式可以解决这个参数错位问题:
方案1:调用构造函数时改用冒号语法
保持Vector3:new的定义不变,调用时将点语法改为冒号语法:
vec1 = Vector3:new(1,2,3) vec2 = Vector3:new(5,1,0)
冒号语法会自动把Vector3作为self传入构造函数,后续的1、2、3就能正确对应x、y、z参数。
方案2:修改构造函数为点语法定义
如果习惯用点语法调用构造函数,可以将new方法改为点语法,手动处理self参数:
function Vector3.new(self, x,y,z) local instance = { x = x or 0, y = y or 0, z = z or 0 } setmetatable(instance, self) return instance end
修改后,无论是Vector3.new(Vector3,1,2,3)还是Vector3:new(1,2,3)都能正常工作。
通常推荐方案1,这是Lua中类构造函数调用的常规写法。
内容的提问来源于stack exchange,提问作者TheJalfireKnight
相关产品推荐
相关产品推荐

