【问题标题】:Using Metamethods in Lua: Error when using _add在 Lua 中使用元方法:使用 _add 时出错
【发布时间】:2016-08-24 05:53:20
【问题描述】:

我正在研究一种管理 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

这是我收到的输出:

由于错误而失败:main.lua:12: 尝试对 全局“X”(一个表值)

关于我可能做错的任何想法?很抱歉没有显示整个代码,我觉得发布太多了。

对不起,这篇文章组织得很糟糕。我很少在论坛上发帖。

感谢您能给我的任何帮助!

【问题讨论】:

  • 我发现使用 J = (getmetatable(X)._add(X, Y)) 有效,这意味着元方法本身正在工作。

标签: lua


【解决方案1】:

事实证明,问题在于我在 _add 中使用了单个 _ 而不是使用 __add。

我有时很傻。 至少感谢您的阅读!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-11
    • 2012-07-23
    • 2013-11-20
    • 2012-01-13
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多