我有一个 Ruby 类 C
,它包含一些第三方模块,比如 A
和 B
。
模块 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
的功能优先于 D
:我想移动 A
,使其位于 的前面D
在祖先链中,像这样:
C ... A ... B ... D
我曾尝试再次简单地包含 A
,但这没有用。有办法做到这一点吗?
最佳答案
混合层次结构一旦建立就无法更改。只有包含顺序决定了层次结构。在将 B
包含到 C
之后,您必须将 A
包含到 C
中(第一次),或者,如果您在 C
之前添加 A
而不是包含它,那么它将优先于 D
即使 B
是稍后包含到 C
中。
关于ruby - 在 Ruby 中,是否可以将模块向上移动到祖先链?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36799396/