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