【发布时间】:2010-11-11 15:09:53
【问题描述】:
我非常喜欢“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'}
我在这里介绍一些新的属性等等。
现在我的问题是,我没有让事情发挥作用,“金钱”继承了“类”和“数字”的所有方法包括“数字”中定义的所有元方法。
我已经尝试了几件事,例如覆盖“new”或修改元表,但我无法让事情正常工作,没有丢失“money”中的“class”方法或丢失“number”中的元方法“钱”
我知道,那里有很多类实现,但我真的很想坚持使用 lua 本身的最小化方法。
任何帮助将不胜感激!
非常感谢!
【问题讨论】:
标签: oop inheritance lua