erweitern in Ruby

MD Aminul Islam 21 Juni 2023
  1. Was ist include in Ruby
  2. Was ist erweitern in Ruby
  3. Verwenden Sie in Ruby include und extend
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.

MD Aminul Islam avatar MD Aminul Islam avatar

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