我有一個Ruby類C
,其中包括一些第三方模塊,說A
和B
。在Ruby中,是否可以將模塊移到祖先鏈上?
模塊A
通過C
的類繼承鏈間接包含;假設我無法控制A
的位置。現在,C
包括B
直接,但B
包括另一模塊D
這恰好提供也由A
提供的功能,例如:
class C < Base
# Base includes A
include B # includes D
# methods in A overridden by D
end
祖先鏈是這樣的(其中...
表示零個或多個其它這是不相關的討論祖先):
C ... B ... D ... A
我想要的A
功能採取precdence超過D
:我想移動A
所以它是在祖先鏈的D
前,像這樣:
C ... A ... B ... D
我已經嘗試只是包括A
再次但這並沒有工作。有沒有辦法做到這一點?
你看過嗎[莫獨樂#prepend'(http://ruby-doc.org/core-2.3.0/Module.html#method-i-prepend)? – Myst
P.S.我的意思是,預先加上'A',然後加上'B' ....另外 - 不會改變破壞'B'的實現(可能依賴於原始繼承流程)的層次結構風險? – Myst
會有這種風險,但在這種特殊情況下,我知道風險不存在。我只有這個問題,因爲B包括了它不應該的東西。 – starfry