[Ruby] Klassenverschachtelung, Vererbung und die Grundlagen des Selbst

Einführung

Welchen Einflussbereich hat die Vererbung während der Arbeit? .. Und Was bedeutet Selbst in diesem Fall? .. Und Ich konnte nur den Grundteil flauschig verstehen, also diesmal

--Klasse --Erbe - self --Nest

Ich habe beim Schreiben gelernt, also werde ich es als Aufzeichnung schreiben. Ich möchte über Methoden und Variablen schreiben, aber ich möchte sie separat schreiben, weil es lang zu sein scheint.

Klassenvererbung

Sie können beim Definieren der Klasse eine Oberklasse angeben: Wenn dies zu diesem Zeitpunkt nicht angegeben ist, wird die Objektklasse automatisch vererbt. Wenn eine neue Klasse definiert wird, erbt sie daher eine Klasse. Es wird immer irgendwo im Vererbungsbaum sein.

Ziel zu erben

Obwohl es nicht vererbt wird, können Sie auch auf Oberklassenkonstanten und Klassenvariablen verweisen.

class Klass
  VALUE = "I'm VALUE"
  @@class_val = "I'm class_val"
end

class A < Klass
end

class B < A
  def self.display_bal
    puts @@class_val
  end
end

#Verweis auf Konstanten der Oberklasse
puts B::VALUE
# => I'm VALUE

#Vererbung von Klassenvariablen
B.display_val
# => I'm class_val

self

class Klass
  # Klass
  p self
  
  # Klass
  def (p self).class_method
      puts "inner_class_method"  
      # Klass
      p self
  end

  def instance_method
    puts "inner_instance_method"
    # <Klass:0x00007fa07e1a47c8>
    p self
  end
end

Klass.class_method
klass_instanse =  Klass.new
klass_instanse.instance_method

Im folgenden Beispiel haben wir nur dann auf das "Instanzobjekt" verwiesen, wenn es innerhalb einer Instanzmethode verwendet wurde. Da sich "self", das beim Definieren einer Klassenmethode verwendet wird, auf ein Klassenobjekt bezieht, kann "self" von "self. Method name" direkt durch den Klassennamen angegeben werden. Wenn Sie eine Klasse definieren, z. B. die Verschachtelung von Klassen, können Sie sie in einer anderen Klasse verschachteln. Es gibt die folgenden zwei Muster als Definitionsmethode, aber einige Verhaltensweisen ändern sich.

#Schreiben Sie direkt in
class TopKlass
  class Klass
  end
end

## ------ ##

# ”::Verwenden
class TopKlass
end

class TopKlass::Klass
end

Unterschiede im Verhalten je nach Definition

Referenz der Konstanten

・ Beschreiben Sie direkt in Es bezieht sich auf die Konstanten in der Reihenfolge von sich selbst bis zur obersten Ebene. Der Fluss bezieht sich auf die oberste Ebene in der Reihenfolge von der nächsten zu sich selbst und schließlich auf die oberste Ebene.

VALUE = "Top level"

class TopKlass
  VALUE = "in TopKlass"

  class InnerKlass
    def self.put_value
      puts VALUE
    end
  end

end

TopKlass::InnerKlass.put_value
# => in TopKlass

・ Beschrieben mit einem Namespace Wenn es keine Konstante hat, verweist es auf die oberste Ebene und dann von dort in Richtung seiner Klasse.

VALUE = "Top level"

class TopKlass
  VALUE = "in TopKlass"
end

class TopKlass::InnerKlass
  def self.put_value
    puts VALUE
  end
end

TopKlass::InnerKlass.put_value
# => Top level

Klären Sie, ob Sie in einer Klasse oder einem Modul verschachteln möchten

· Beschrieben in Da in jeder Hierarchie eine Klasse oder ein Modul angegeben ist, tritt ein Fehler auf, wenn ein separat definiertes Modul als Klasse angegeben wird.

module TopKlass
end

class TopKlass
  class InnerKlass
  end
end

# => TopKlass is not a class (TypeError)

・ Beschrieben mit einem Namespace Da nur die am Ende (ganz rechts) beschriebene angibt, ob es sich um eine Klasse handelt oder nicht Davon abgesehen macht es die Beurteilung von Klasse und Modul flexibel.

module TopKlass
end

class TopKlass::InnerKlass
end

#Kein Fehler

Gibt an, ob eine Ausnahme ausgelöst werden soll, wenn kein Verschachtelungsobjekt vorhanden ist

· Beschrieben in Im folgenden Beispiel, wenn TopKlass nicht separat definiert wurde Es tritt keine Ausnahme auf, da TopKlass neu definiert wurde.

class TopKlass
  class InnerKlass
  end
end

・ Beschrieben mit einem Namespace

In den folgenden Fällen wird eine Ausnahme ausgelöst, wenn TopKlass nicht separat definiert wird. Es wird keine neue TopKlass definiert.

class TopKlass::InnerKlass
end

# => uninitialized constant TopKlass (NameError)

Ende

Recommended Posts

[Ruby] Klassenverschachtelung, Vererbung und die Grundlagen des Selbst
[Ruby] Zusammenfassung der Klassendefinitionen. Beherrsche die Grundlagen.
Grundlagen von Ruby
[Einführung in Ruby] Über die Rolle von true und break in der while-Anweisung
Ruby on Rails ~ Grundlagen von MVC und Router ~
Informationen zu next () und nextLine () der Scannerklasse
[Für Anfänger] DI ~ Die Grundlagen von DI und DI im Frühjahr ~
Ich habe die Typen und Grundlagen von Java-Ausnahmen zusammengefasst
[Technisches Memo] Über die Vor- und Nachteile von Ruby
Docker-Überwachung - Erläuterung der Grundlagen der Grundlagen
[GCD] Grundlagen der DispatchQueue-Klasse
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
[Ruby] Fragen und Überprüfung der Anzahl der Methodenargumente
Das n-te und n + 1-Zeichen einer Ruby-Zeichenfolge
Grundlagen der bedingten Verzweigung und Rückkehr
Über die Grundlagen der Android-Entwicklung
[Ruby] Beziehung zwischen Elternklasse und Kinderklasse. Beziehung zwischen Klasse und Instanz.
Die Grundlagen von SpringBoot + MyBatis + MySQL
[Ruby-Grundlagen] Split-Methode und to_s-Methode
Dies und das von JDK
[Ruby] Grundlagen zu Datum, Uhrzeit und Datumszeit
Verschiedene Methoden der String-Klasse
Lesen Sie die ersten 4 Bytes der Java-Klassendatei und geben Sie CAFEBABE aus
Grundlagen von Ruby ~ Rückblick auf schwer verständliche ~
Über objektorientierte Vererbung und über Ertrag Ruby
Grundlagen von Ruby 2 ~ Rückblick auf schwer verständliche ~
[Ruby] Zeigt den Inhalt von Variablen an
Der Unterschied zwischen der Ruby-Instanzmethode und der Klassenmethode ist leicht zu verstehen.
[Ruby] Ich möchte nur den Wert des Hash und nur den Schlüssel extrahieren
[Ruby] Untersuchen wir den Vererbungsbaum, während wir den Ablauf der Methodensuche beobachten
Zeigen Sie den japanischen Kalender und Tag mit der Java8-Standardklasse an
[Herausforderung CircleCI von 0] Lernen Sie die Grundlagen von CircleCI
Verstehen Sie die Grundlagen von Android Audio Record
[Ruby] Von den Grundlagen bis zur Injektionsmethode
Jetzt habe ich die Grundlagen von RecyclerView zusammengefasst
Ein- und Ausklappen des Inhalts der Recycler-Ansicht
Informationen zur Funktionsweise von next () und nextLine ()
Erläuterung der Ruby Time- und Date-Objekte
[Tag: 5] Ich habe die Grundlagen von Java zusammengefasst
[Ruby] Schneiden Sie den Inhalt von Twitter-Anzeigen ab
Rückblick auf die Grundlagen von Java
Richtige Verwendung der Schnittstelle und der abstrakten Klasse
[Ruby] Schleifenunterscheidung und Verwendung in Ruby
Vergleich von JavaScript-Objekten und Ruby-Klassen
Ruby-Grundlagen
Benennen und rufen Sie in Ruby übergeordnete Klassenmethoden explizit auf
Ruft den Klassennamen und den Methodennamen des Controllers ab, der vom HandlerInterceptor von Spring Boot ausgeführt wird