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

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

我以前没有真正使用过元方法,所以这是一个学习经验。我想轻松地添加两个 Vector2。这是我的元方法函数:

local vectorMethods = {
    _add = function(lhs,rhs)
        return Positions.Vector2.new(lhs.x+rhs.x,lhs.y+rhs.y);
    end
};

我创建了这个函数,浏览了 Lua-users wiki 关于元方法的页面。根据我看到的,如果我使用 setmetamethod 将 Vector2 表链接到元方法,这应该可以工作。

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

这是我收到的输出:

Failed due to error: main.lua:12: attempt to perform arithmetic on global 'X' (a table value)

有任何想法我可能做错了什么?抱歉我没有显示整个代码,我觉得这太多了。

抱歉这篇文章组织得不好,我不经常在论坛上发帖。

非常感谢您能给我任何帮助!

点赞
用户5565844
用户5565844

事实证明,问题来自于我在 _add 中使用了一个 _ 而不是两个 __

我有时候真的很傻。

谢谢你至少看完了这个!

2016-08-23 21:53:20