元方法我非常喜歡怎樣的面向對象編程中的「編程LUA」 16.1,16.2描述:繼承了在Lua
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:new()
我想爲操作符重載(__add,__sub等)定義metamethods in這個類,所以像這樣:
n1 = number:new()
n2 = number:new()
print(n1 + n2)
工程。這不是一個真正的問題。但現在我想有一個從「數字」繼承的第三類「金錢」:
money = number:new{value=10,currency='EUR'}
我在這裏介紹了一些新的屬性。
現在我的問題是,我沒有得到的東西工作,「錢」繼承「類」和「數字」所有方法,包括所有metamethods中定義的「數量」。
我已經嘗試了幾件事情,像覆蓋「新」或修改metatables,但我無法讓事情工作,沒有丟失「錢」中的「類」的方法或失去「數字」在「錢」
我知道,那裏有很多的類實現,但我真的想堅持lua本身的最小途徑。
任何幫助將非常感謝!
非常感謝!
謝謝,它的工作原理! – aurora 2010-11-19 15:40:59
好的解決方案。爲了避免在所有基類中重複這一點,我爲它們創建了一個頂級的'Class'。做這項工作的訣竅是向它們的構造函數中添加'o = Class.new(self)',以防覆蓋構造函數。 – Ludwik 2016-03-26 08:57:15