Qu'est-ce que le soi? Qu'est-ce qu'une méthode de classe? Je comprends en quelque sorte la classe et l'instance
soi est l'objet lui-même
Même si on me le disait, cela ne m'est pas venu à l'esprit. Cependant, je pense que c'est vrai maintenant que j'en suis tombé amoureux.
Comprenons d'abord les objets. Dans Ruby, tout est objet.
Dans le monde réel, nous traitons toutes sortes de choses telles que les personnes, les choses et les animaux comme des objets.
La différence entre un objet et une instance a été expliquée de manière facile à comprendre sur le site suivant, veuillez donc le lire si vous êtes intéressé. En un mot ** Les objets créés à partir de classes sont appelés instances ** est.
Je comprends que la différence entre les objets d'instance de classe me fait me sentir comme un dieu
Nom de classe.new
Génération d'instance
class Sample
end
p Sample.new #=> #<Sample:0x00007fe79b835240>
L'instance a été créée.
Jusqu'à présent, nous avons parlé d'instances et d'objets, mais finalement nous allons mettre un pied en soi. Pour le moment, créons un fichier rb approprié et exécutons-le. Ou essayez de taper irb dans le terminal, puis de taper self. (Vous ne pouvez pas l'utiliser à moins d'avoir installé Ruby. Si vous n'obtenez pas les informations de version en tapant ruby -v, il n'est pas installé, veuillez donc l'installer.)
sample.rb
p self
#=> main
Le principal est sorti. Qu'est-ce que le principal?
En un mot ** main est une instance de la classe Object qui existe au niveau supérieur. ** ** c'est difficile.
Je vais l'expliquer fermement. Commençons par la classe Object.
La classe Object est une classe qui se trouve au sommet (parent) réel de la classe. (En fait, il y a une autre classe ci-dessus, mais je vais l'omettre ici.) La classe a une structure hiérarchique et la classe parent telle que la classe de chaîne de caractères est la classe Object. (Vous pouvez obtenir votre propre classe avec la méthode de classe et la classe parente avec la méthode de superclasse.)
p "Chaîne".class #=> String
p String.superclass #=> Object
Vient ensuite le niveau supérieur, qui est en dehors des définitions de classe et de module. (Je ne parlerai pas du module dans cet article. Considérez-le comme une classe restreinte.)
Haut niveau
#d'ici
#
#
#
#C'est le niveau supérieur
class Sample
#En classe
end
#d'ici
#
#
#
#Haut niveau jusqu'à présent
module SampleModule
#Dans le module
end
#d'ici
#
#
#
#Haut niveau jusqu'à présent
Et quand je frappe irb au terminal, c'est aussi le niveau supérieur.
Lorsque vous tapez irb dans le terminal
irb(main):001:0>
Ce sera.
Vous pouvez voir que c'est le niveau supérieur, et qu'il y a main après irb.
Aussi, si vous vérifiez l'auto-classe au plus haut niveau
p self #=> main
p self.class #=> Object
Vous pouvez voir que la classe self (principale) de niveau supérieur est Object.
Revenant à ce que j'ai dit plus tôt `main est une instance de la classe Object qui existe au niveau supérieur. C'était ". c'est
Le résultat de l'exécution de la méthode p au niveau supérieur était p self # => main
.
Et c'était p self.class # => Object
Et soi fait référence à l'objet lui-même (l'instance elle-même).
Vous pouvez également voir à partir de.
La raison pour laquelle vous pouvez soudainement exécuter des méthodes p, etc. au niveau supérieur est que main est une instance de la classe Object! (La bonne réponse est qu'il peut être exécuté car le module Kernel est inclus dans la classe Object, mais il est omis ici.)
Ensuite, regardons soi-même dans la classe.
Soi en classe
class Sample
p self #=> Sample
end
le moi était l'objet lui-même. Par conséquent, il représente l'objet de classe lui-même dans la classe.
Self dans la méthode d'instance représente l'instance elle-même (l'objet lui-même).
Self dans la méthode d'instance
class Sample
def hoge
p self
end
end
sample = Sample.new
sample.hoge #=> #<Sample:0x00007f8524034f70>
À propos, lorsque Ruby appelle une méthode, il appelle implicitement la méthode pour self. (Appelez la méthode pour vous-même sans permission.)
Qu'est-ce que ça veut dire
class Person
def greeting
p self
hello
end
def hello
p "hello"
end
end
person = Person.new
person.greeting #=> #<Person:0x00007f9937848a28>
#=> "hello"
La même chose est la suivante.
class Person
def greeting
p self
self.hello
end
def hello
p "hello"
end
end
person = Person.new
person.greeting #=> #<Person:0x00007f9937848a28>
#=> "hello"
Avez-vous remarqué ce qui est différent? C'est vrai. L'appel à bonjour dans la méthode de salutation est précédé de self. En fait, ce moi est le même avec ou sans lui. Je pense que c'est cette spécification car il est difficile de s'ajouter à chaque fois qu'une méthode est appelée.
À ce stade, self dans la méthode de salutation est l'instance de la classe Person elle-même, donc la méthode hello est appelée pour cette instance.
(self.hellodans la
méthode de salutation et` person.hello de premier niveau ont le même résultat.)
Self dans la méthode de classe représente également l'objet lui-même.
Méthode d'auto en classe
class Person
def self.greeting
p self
end
end
Person.greeting #=> Person
La personne est renvoyée.
Bien sûr, le self dans cette partie de définition de méthode représente également l'objet lui-même, mais le self dans l'emplacement de définition de méthode est un peu étrange.
def self.greeting #← Ce moi
end
Une méthode de classe est l'une des méthodes singulières. Alors, qu'est-ce qu'une méthode singulière?
Les méthodes singulières définissent des méthodes pour des objets individuels (instances) quelle que soit la classe.
morning = "good morning"
def morning.greeting
p self
end
morning.greeting #=> "good morning"
Qu'est-ce qui se passe avec ça?
Premièrement, avec morning =" bonjour "
, la chaîne de caractères "bonjour" est affectée à la variable (objet) appelée matin.
Après cela, la méthode de salutation est définie pour l'objet du matin.
Dans la méthode de salutation, la méthode p renvoie self.
Dans ce cas, self est un objet string "bonjour"
La chaîne "bonjour" est sortie.
Ce formulaire est une méthode singulière.
C'est la même chose que la méthode de définition de méthode de classe.
Définition de la méthode de classe
class Person
def self.greeting
end
end
Par rapport au code ci-dessus, def 〇 〇. La méthode de définition est la même que le nom de la méthode. Et puisque le moi à cette époque était la personne
Définition de la méthode de classe
class Person
def Person.greeting
end
end
Vous pouvez également écrire comme ça.
J'ai essayé de m'utiliser moi-même à divers endroits. J'espère que vous pouvez comprendre que le soi représente la confiance en soi de l'objet.
Après tout, si vous déplacez le code vous-même et le vérifiez, votre compréhension augmentera. Si vous avez des questions, veuillez nous le faire savoir dans les commentaires.
Rubima http://i.loveruby.net/ja/rhg/book/minimum.html
Recommended Posts