erweitern in Ruby
Das Referenzieren von Klasse zu Klasse und von Funktion zu Funktion ist eine häufige Aufgabe in der objektorientierten Programmierung. Wenn Sie nach einer Möglichkeit suchen, Module aus verschiedenen Klassen zu importieren, kann Ihnen dieser Artikel helfen.
In Ruby können Sie dies auf zwei verschiedene Arten tun. Entweder mit include
oder extend
.
In diesem Artikel besprechen wir das include
und extend
in Ruby und sehen uns ein relevantes Beispiel an, um das Thema zu vereinfachen.
Was ist include
in Ruby
include
ermöglicht es Ihnen, ein Codemodul zu importieren. Wenn Sie versuchen, eine Methode zum direkten Importieren des Moduls über die Klasse zu erhalten, erhalten Sie eine Fehlermeldung, da es als Unterklasse für die Oberklasse importiert wird.
Die Lösung hier ist, es durch die Instanz der Klasse zu bekommen. Sie können include
verwenden, indem Sie das Schlüsselwort include
verwenden.
Was ist erweitern
in Ruby
Eine andere Möglichkeit, ein Modul zu importieren, ist die Verwendung des Schlüsselworts extend
. Über extend
können Sie eine Methode als Klassenmethode importieren.
Wenn Sie jedoch versuchen, eine Methode eines importierten Moduls über die Instanz abzurufen, erhalten Sie eine Fehlermeldung. Sie müssen diese Methode von der Klassendefinition erhalten, um diesen Fehler zu vermeiden.
Verwenden Sie in Ruby include
und extend
In unserem Beispiel unten veranschaulichen wir die Verwendung der Schlüsselwörter include
und extend
in Ruby. Sehen Sie sich den folgenden Beispielcode an.
module MyModule
def MyMethod
puts 'DelftStack is nice.'
end
end
class ClassA
# only can access MyModule methods
# By the instance.
include MyModule
end
class ClassB
# only can access MyModule methods
# By the class definition.
extend MyModule
end
# Access from the object
ClassA.new.MyMethod
# Acess from class
ClassB.MyMethod
Der Zweck jeder Zeile wird auskommentiert und die Funktionsweise der Schlüsselwörter include
und extend
besprochen. Wenn Sie den obigen Beispielcode ausführen, erhalten Sie die folgende Ausgabe.
DelftStack is nice.
DelftStack is nice.
Wenn Sie nun versuchen, direkt von der Klasse aus auf die Methode zuzugreifen, wie unten:
ClassA.MyMethod
Sie erhalten die folgende Fehlermeldung:
# NoMethodError: undefined method
# `MyMethod' for ClassA:Class
Dies liegt daran, dass ClassA
das Modul mit dem Schlüsselwort include
einbindet und include
es Ihnen nicht erlaubt, eine Methode direkt aus der Klasse aufzurufen.
Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.
LinkedIn