Ich habe eine Ruby-Klasse C
, die einige Module von Drittanbietern enthält, sagen A
und B
.In Ruby, ist es möglich, ein Modul nach oben der Kette zu bewegen?
Modul A
ist indirekt über C
Klassenvererbungskette enthalten; gehe davon aus, dass ich keine Kontrolle darüber habe, wo A
enthalten ist. Jetzt schließt C
B
direkt, aber B
enthält ein weiteres Modul D
die Funktionalität bereitzustellen, geschieht das auch von A
, wie dies vorgesehen ist:
class C < Base
# Base includes A
include B # includes D
# methods in A overridden by D
end
Die Vorläuferkette geht etwas ähnliches (wo ...
für Null oder mehrere andere Vorfahren, die nicht relevant für diese Diskussion sind):
C ... B ... D ... A
ich möchte, dass die Funktionalität von A
precdence über D
nehmen: ich möchtebewegenso ist es vor D
in der Vorläuferkette, wie folgt aus:
C ... A ... B ... D
Ich habe einfach versucht, einschließlich A
wieder, aber das hat nicht funktioniert. Gibt es eine Möglichkeit, dies zu tun?
Haben Sie [Mo dule # prepend'] (http://ruby-doc.org/core-2.3.0/Module.html#method-i-prepend)? – Myst
P.S. Ich meinte, "A" vorangestellt und dann "B" .... Auch - wird das Hierarchierisiko die 'B'-Implementierung nicht ändern (was sich auf den ursprünglichen Vererbungsfluss beziehen könnte)? – Myst
Es würde dieses Risiko geben, aber in diesem speziellen Szenario weiß ich, dass das Risiko nicht da ist. Ich habe nur das Problem, weil B etwas beinhaltet, was es nicht sollte. – starfry