我有一个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