Was ist Rubys Selbst?

Artikel Ziel

Was ist Selbst? Was ist eine Klassenmethode? Ich verstehe irgendwie die Klasse und die Instanz

Was in diesem Artikel zu erklären

Allgemeine Beschreibung des Selbst

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.

Was ist ein Objekt?

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.

Unterschied zwischen Objekt und Instanz

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.

Ich verstehe, dass ich mich aufgrund des Unterschieds zwischen Klasseninstanzobjekten wie ein Gott fühle

Instanzgenerierung

Klassenname.neu

Instanzgenerierung


class Sample
end

p Sample.new #=> #<Sample:0x00007fe79b835240>

Die Instanz wurde erstellt.

Über sich selbst

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.

Objektklasse

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

Höchststufe

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.)

Selbst im Unterricht

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.

Selbst in der Instanzmethode

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 derGrußmethode und top-level person.hello haben das gleiche Ergebnis.)

Klassenmethode selbst

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 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.

Schließlich

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.

Referenz

Rubima http://i.loveruby.net/ja/rhg/book/minimum.html

Recommended Posts

Was ist Rubys Selbst?
Was ist Selbst
Was ist Rubys attr_accessor?
Was ist null? ]]
Was ist java
Was ist Schlüsselumhang?
Was ist Jackson?
Was ist Jenkins?
Was ist ArgumentMatcher?
Was ist IM-Jonglieren?
Was ist params
Was ist SLF4J?
Was ist Fassade? ??
Was ist Java <>?
Was ist Gradle?
Was ist POJO?
Was ist java
Was ist centOS?
Was ist RubyGem?
Was ist before_action?
Was ist Docker?
Was ist Byte?
Was ist Tomcat?
Was ist Docker-Compose?
Was ist ein Konstruktor?
Was ist harte Codierung?
Was ist ein Stream?
Was ist Java-Kapselung?
Was ist die Erlaubnis verweigert?
Was ist Instanzsteuerung?
Was ist ein Initialisierer?
Was ist Spring Tools 4?
Was ist ein Operator?
Was ist Objektorientierung?
Was ist Guavas @VisibleForTesting?
Was ist ein MVC-Modell?
Was ist eine Anmerkung?
Was ist Java-Technologie?
Was ist Java API-Java?
Was ist @ (Instanzvariable)?
Was ist Gradles Artefakt?
Was ist JPA-Prüfung?
[Java] Was ist flatMap?
Was ist ein Servlet?
Was ist Webentwicklung?
[Java] Was ist ArrayList?
Was ist eigentlich objektorientiert?
Was ist HttpSession session = request.getSession ();
Was ist Java Assertion? Zusammenfassung.
Was ist eine Wrapper-Klasse?
Was ist ein boolescher Typ?