我非常喜欢“programming in lua”16.1, 16.2 中如何描述面向对象编程:
http://www.lua.org/pil/16.1.html
http://www.lua.org/pil/16.2.html
并愿意遵循这种方法。但我想更进一步:我想要一个名为“class”的基“类”,它应该是所有子类的基础,因为我想在那里实现一些辅助方法(如“instanceof”等) .),但本质上应该是书中描述的那样:
function class:new(o)
o = o or {}
setmetatable(o, self)
self.__index = self
return o
end
现在我的问题:
我想要一个类“number”,它继承自“class”:
number = class:new()
我想在此类中定义运算符重载的元方法(__add、__sub 等),例如:
n1 = number:new()
n2 = number:new()
print(n1 + n2)
作品。这并不是真正的问题。但现在我想要第三类“money”,它继承自“number”:
money = number:new{value=10,currency='EUR'}
我在这里介绍一些新的属性等等。
现在我的问题是,我没有让事情正常工作,“钱”继承了“类”和“数字”的所有方法包括“number”中定义的所有元方法。
我已经尝试了几件事,例如覆盖“new”或修改元表,但我无法让事情正常工作,而不会丢失“money”中“class”的方法或丢失“money”中“number”的元方法
我知道,有很多类实现,但我真的很想坚持使用 lua 本身的最小方法。
任何帮助将非常感激!
非常感谢!