Ruby Mixins Methode überschreiben Klärung
Habe ich gerade konfrontiert dieses Verhalten verstehe ich nicht wirklich.
module M
def foo
"module_foo"
end
end
class C
def foo
"class_foo"
end
include M
end
puts C.new.foo
Warum C.new.foo
tatsächlich zurück class_foo
? Ich war ziemlich sicher, dass die Methode sollte überschrieben werden, durch die eine im Modul. Eine andere Sache, zu ersetzen "class_foo"
mit super
macht C.new.foo
return `"module_foo"
Die tatsächlich aussieht wie Modul ist irgendwie eingeschlossen vor die Klasse-Instanz-Methode definiert ist. Könnten Sie das bitte klären?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vom Programmierung Ruby Abschnitt Mixins in Verbindung:
Also, was Sie erleben ist normal.
das Modul M ist eine Superklasse der Klasse C
Daher Ihre Methode foo in der Klasse C überschreibt die Methode foo in Modul M
Hier ist, wie ruby hat Methode lookup:
Finden Sie weitere details hier: http://ruby-metaprogramming.rubylearning.com/html/ruby_metaprogramming_2.html