Was ist Selbst? Was ist eine Klassenmethode? Ich verstehe irgendwie die Klasse und die Instanz
Selbst ist das Objekt selbst
Selbst wenn mir gesagt wurde, kam es mir nicht in den Sinn. Ich denke jedoch, dass das jetzt stimmt, da ich mich in es verliebt habe.
Lassen Sie uns zuerst Objekte verstehen. In Ruby ist alles ein Objekt.
In der realen Welt behandeln wir alle Arten von Dingen wie Menschen, Dinge und Tiere als Objekte.
Der Unterschied zwischen einem Objekt und einer Instanz wurde auf der folgenden Website auf leicht verständliche Weise erläutert. Lesen Sie ihn daher bei Interesse. In einem Wort ** Aus Klassen erstellte Objekte werden als Instanzen bezeichnet ** ist.
Klassenname.neu
Instanzgenerierung
class Sample
end
p Sample.new #=> #<Sample:0x00007fe79b835240>
Die Instanz wurde erstellt.
Bisher haben wir über Instanzen und Objekte gesprochen, aber schließlich werden wir einen Fuß in uns selbst setzen. Lassen Sie uns vorerst eine entsprechende rb-Datei erstellen und ausführen. Oder versuchen Sie, irb in das Terminal einzugeben und dann self einzugeben. (Sie können es nur verwenden, wenn Sie Ruby installiert haben. Wenn Sie die Versionsinformationen nicht durch Eingabe von ruby -v erhalten, wird es nicht installiert. Installieren Sie es daher.)
sample.rb
p self
#=> main
Die Hauptsache kam heraus. Was ist Haupt?
In einem Wort ** main ist eine Instanz der Object-Klasse, die auf der obersten Ebene vorhanden ist. ** **. es ist schwierig.
Ich werde es fest erklären. Beginnen wir mit der Object-Klasse.
Die Object-Klasse ist eine Klasse, die sich am oberen Ende (übergeordnet) der Klasse befindet. (Eigentlich gibt es oben eine andere Klasse, aber ich werde sie hier weglassen.) Die Klasse hat eine hierarchische Struktur, und die übergeordnete Klasse, z. B. die Zeichenfolgenklasse, ist die Object-Klasse. (Sie können Ihre eigene Klasse mit der Klassenmethode und die übergeordnete Klasse mit der Superklassenmethode erhalten.)
p "String".class #=> String
p String.superclass #=> Object
Als nächstes folgt die oberste Ebene, die außerhalb der Klassen- und Moduldefinitionen liegt. (Das Modul wird in diesem Artikel nicht behandelt. Stellen Sie es sich als eingeschränkte Klasse vor.)
Höchststufe
#von hier
#
#
#
#Dies ist die oberste Ebene
class Sample
#Im Unterricht
end
#von hier
#
#
#
#Top Level bisher
module SampleModule
#Im Modul
end
#von hier
#
#
#
#Top Level bisher
Und wenn ich am Terminal auf irb drücke, ist es auch die oberste Ebene.
Wenn Sie irb in das Terminal eingeben
irb(main):001:0>
Es wird sein.
Sie können sehen, dass dies die oberste Ebene ist und dass es nach irb main gibt.
Auch wenn Sie die Selbstklasse auf der obersten Ebene überprüfen
p self #=> main
p self.class #=> Object
Sie können sehen, dass die oberste Selbstklasse (Hauptklasse) Object ist.
Zurück zu dem, was ich zuvor gesagt habe
main ist eine Instanz der Object-Klasse, die auf der obersten Ebene vorhanden ist. Es war
.
das ist
Das Ergebnis der Ausführung der p-Methode auf der obersten Ebene war "p self # => main".
Und es war p self.class # => Object
Und Selbst bezieht sich auf das Objekt selbst (die Instanz selbst).
Sie können auch von sehen.
Der Grund, warum Sie plötzlich p-Methoden usw. auf der obersten Ebene ausführen können, ist, dass main eine Instanz der Object-Klasse ist! (Die richtige Antwort ist, dass es ausgeführt werden kann, weil das Kernel-Modul in der Object-Klasse enthalten ist, aber hier weggelassen wird.)
Als nächstes schauen wir uns das Selbst in der Klasse an.
Selbst im Unterricht
class Sample
p self #=> Sample
end
Selbst war das Objekt selbst. Daher repräsentiert es das Klassenobjekt selbst in der Klasse.
Self in der Instanzmethode repräsentiert die Instanz selbst (das Objekt selbst).
Selbst in der Instanzmethode
class Sample
def hoge
p self
end
end
sample = Sample.new
sample.hoge #=> #<Sample:0x00007f8524034f70>
Übrigens, wenn Ruby eine Methode aufruft, ruft es implizit die Methode für sich selbst auf. (Rufen Sie die Methode für sich selbst ohne Erlaubnis auf.)
Was bedeutet das
class Person
def greeting
p self
hello
end
def hello
p "hello"
end
end
person = Person.new
person.greeting #=> #<Person:0x00007f9937848a28>
#=> "hello"
Das gleiche ist wie folgt.
class Person
def greeting
p self
self.hello
end
def hello
p "hello"
end
end
person = Person.new
person.greeting #=> #<Person:0x00007f9937848a28>
#=> "hello"
Hast du bemerkt, was anders ist? Korrekt. Dem Aufruf von Hallo in der Begrüßungsmethode geht self voraus. Eigentlich ist dieses Selbst mit oder ohne es dasselbe. Ich denke, dass es diese Spezifikation ist, weil es schwierig ist, sich jedes Mal, wenn eine Methode aufgerufen wird, selbst hinzuzufügen.
Zu diesem Zeitpunkt ist self in der Begrüßungsmethode die Instanz der Person-Klasse selbst, daher wird für diese Instanz die Hello-Methode aufgerufen.
(self.helloin der
Grußmethode und top-level person.hello
haben das gleiche Ergebnis.)
Selbst in der Klassenmethode repräsentiert auch das Objekt selbst.
Selbst in der Klassenmethode
class Person
def self.greeting
p self
end
end
Person.greeting #=> Person
Person wird zurückgegeben.
Natürlich repräsentiert das Selbst in diesem Methodendefinitionsteil auch das Objekt selbst, aber das Selbst in der Position der Methodendefinition ist etwas seltsam.
def self.greeting #← Dieses Selbst
end
Eine Klassenmethode ist eine der singulären Methoden. Was ist eine singuläre Methode?
Singuläre Methoden definieren Methoden für einzelne Objekte (Instanzen) unabhängig von der Klasse.
morning = "good morning"
def morning.greeting
p self
end
morning.greeting #=> "good morning"
Was ist damit los? Zunächst wird mit "Morgen =" Guten Morgen "die Zeichenkette" Guten Morgen "der Variablen (Objekt) mit dem Namen Morgen zugewiesen. Danach wird die Begrüßungsmethode für das Morgenobjekt definiert. In der Begrüßungsmethode gibt die p-Methode self zurück. In diesem Fall ist self ein String-Objekt "Guten Morgen". Die Zeichenfolge "Guten Morgen" wird ausgegeben.
Diese Form ist eine singuläre Methode.
Es ist dasselbe wie die Definitionsmethode für Klassenmethoden.
Definition der Klassenmethode
class Person
def self.greeting
end
end
Im Vergleich zum obigen Code ist def 〇 〇. Die Definitionsmethode ist dieselbe wie der Methodenname. Und da Selbst zu dieser Zeit Person war
Definition der Klassenmethode
class Person
def Person.greeting
end
end
Sie können auch so schreiben.
Ich habe versucht, mich an verschiedenen Orten zu benutzen. Ich hoffe, Sie können verstehen, dass Selbst Objekt Selbstvertrauen darstellt.
Wenn Sie den Code selbst verschieben und überprüfen, wird sich Ihr Verständnis verbessern. Wenn Sie Fragen haben, lassen Sie es uns bitte in den Kommentaren wissen.
Rubima http://i.loveruby.net/ja/rhg/book/minimum.html
Recommended Posts