Hier ist die aktuelle Situation neu definiert wird:Aufruf eine Klasse-Funktion, die von einer inkludierten Modul in Ruby
Core_Class die Schlüssel-Klasse ist, die eine Menge von Modulen Use_Class von Core_Class
In einem erbt umfasst von Die Module von Core_Class sollen auf eine in der Core_Class definierte Methode zugreifen. Das funktioniert gut. Lassen Sie uns diese Methode header() aufrufen
Ich versuche jetzt, diese Funktion in Use_class neu zu definieren, so dass die use_class eine eindeutige Header-Methode hat.
Das alles sieht ein bisschen wie folgt aus:
module Print_header
def print_header_
Core_Class.header()
end
end
class Core_Class
include Print_header
def header()
puts "old header"
end
def run
print_header
end
end
class Use_Class < Core_Class
def header()
puts "New header"
end
def run
print_header
end
end
Nun mein Problem ist, dass der alte Code verwendet wird. Ich habe das Gefühl, dass mir etwas an objektorientierter Programmierung, Vererbung und Mixins fehlt, aber ich bin unsicher was. Ich verbrachte ungefähr 2 Stunden damit, es zu googeln, konnte nichts finden, was mir beim Verständnis half, und ich bin der einzige Ruby (sehr sehr Junior) Entwickler im Büro.
Wenn möglich, können Sie eine Erklärung hinzufügen, was falsch ist, außer einer Lösung?
Dank
Beitrag _working_ Code, bitte. Sie können kein Modul mit einem Kleinbuchstaben definieren. Außerdem enthalten die Klassen in Ihrem Code das Modul nicht und Sie rufen 'print_header' nicht auf. Außerdem sieht 'Core_Class' seltsam aus, stattdessen sollten Sie' CoreClass' verwenden. – Stefan
In Ihrem Beispiel wird 'CoreClass' im' PrintHeader' Modul verwendet. Im Grunde ist es nur eine falsche Idee aus der Sicht der Architektur. Ihr 'PrintHeader' muss" nichts wissen "über irgendeine andere Klasse (' CoreClass' oder 'UseClass'). Und etwas Seltsames: 'print_header' druckt keinen Header, aber' header' implementiert nur diese Funktionalität. –
Sorry für den Mangel an Arbeitscode, ich remoting in eine Unix-Umgebung ohne die Möglichkeit, Code zu nehmen –