【发布时间】: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