在Lua中使用元方法:使用_add时出错

在Lua中使用元方法:使用_add时出错,lua,Lua,我正在研究一种管理2D向量的方法,到目前为止进展相当顺利。我有一个调用Positions.lua的模块文件,其中包含Vector2.new(X,Y)的信息 我以前从未真正使用过元方法,所以这是一次学习经历。我想把两个向量2简单地加在一起。这是我的元方法函数: local vectorMethods = { _add = function(lhs,rhs) return Positions.Vector2.new(lhs.x+rhs.x,lhs.y+rhs.y);

我正在研究一种管理2D向量的方法,到目前为止进展相当顺利。我有一个调用Positions.lua的模块文件,其中包含Vector2.new(X,Y)的信息

我以前从未真正使用过元方法,所以这是一次学习经历。我想把两个向量2简单地加在一起。这是我的元方法函数:

local vectorMethods = {
    _add = function(lhs,rhs)
        return Positions.Vector2.new(lhs.x+rhs.x,lhs.y+rhs.y);
    end
};
我在阅读Lua用户关于元方法的wiki页面时创建了这个。根据我所看到的,如果我使用setmetamethod将我的Vector2表链接到metamethod,这应该是可行的

Positions = require("Positions");
X = Positions.Vector2.new(154.1,353.3);
Y = Positions.Vector2.new(5,5);
s,m = pcall(function() J = X+Y end);
if not s then
    print("Failed due to error: "..m);
end
这是我收到的输出:

由于以下错误而失败:main.lua:12:尝试在上执行算术 全局“X”(表值)

你知道我做错了什么吗?很抱歉没有显示完整的代码,我觉得太多了,无法发布

对不起,这篇文章组织得很差。我不经常在论坛上发帖


谢谢你能给我的任何帮助

事实证明,问题是因为我使用了一个“in”add而不是“in”add

我有时候很傻。
至少谢谢你的阅读

我发现使用J=(getmetatable(X)。\u add(X,Y))是有效的,这意味着元方法本身是有效的。