我创建了一个与此处所示类似的函数,但在使用 __add 元方法时遇到了问题。我希望能够在类的两个实例上使用 __add 元方法,但它似乎工作的唯一方法是将元方法添加到实例的元表中。有没有办法可以将其设置为工作,以便我的类或其元表可以具有 __add 元方法并在将实例添加在一起时工作?
function Class(superClass, constructor)
local class = {};
local metatable = {};
if superClass then
metatable.__index = superClass;
end
setmetatable(class, metatable);
function metatable:__call(...)
local instance = {};
setmetatable(instance, { __index = class });
if class.constructor then
class.constructor(instance, ...);
end
return instance;
end
class.constructor = constructor;
return class;
end
这是我想做的一个例子:
A = Class(nil, function(self, num)
self.num = num;
end);
function A:__add(rhs)
return A(self.num + rhs.num);
end
a = A(1);
b = A(2);
c = a + b;