[RUBY] À propos des méthodes singulières

introduction

J'ai résumé les méthodes singulières et les classes singulières de Ruby dans un mémorandum.

Méthode singulière

Dans Ruby, vous pouvez définir une méthode qui est unique à un objet directement, et cette méthode est appelée une méthode singulière.

class Hoge
end

obj = Hoge.new

def obj.method1
  p 'Méthode singulière'
end

obj.method1

# => "Méthode singulière"

Vous devriez pouvoir confirmer que method1 a été appelée de cette manière. Alors quelles sont les conséquences d'un autre objet?

obj2 = Hoge.new
obj2.method1

# => undefined method `method1'

J'ai eu une erreur comme celle-ci. Vous pouvez voir que c'est une méthode unique à ʻobj` même dans la même classe.

L'identité de la méthode singulière

Vous pouvez voir que vous ne pouvez pas appeler une méthode si c'est un objet qui ne définit pas une méthode singulière même dans la même classe. Pour être prudent, utilisons singleton_methods pour nous assurer que la classe Hoge n'a pas vraiment de classes singulières.

class Hoge
end

obj = Hoge.new

def obj.method1
  p 'Méthode singulière'
end

p Hoge.singleton_methods
p obj.singleton_methods

# => []
# => [:method1]

Cependant, si une méthode appartient à une classe, vous commencez peut-être à vous demander à quelle classe appartient la méthode singulière. À la suite de l'enquête, il semble qu'il existe une ** classe singulière ** et la méthode singulière appartient à cette classe.

Classe de singularité

Pour être honnête, je comprends seulement que les classes singulières définissent des méthodes singulières. Vérifions le contenu en utilisant ʻansstors`.

p obj.singleton_class.ancestors

# => [#<Class:#<Hoge:0x00007fca5c866ab8>>, Hoge, Object, Kernel, BasicObject]

De cette façon, la super classe de la classe singulière est comme votre propre classe. Il semble que la méthode de recherche soit dans l'ordre de classe singulière → classe propre → super classe ...

Recommended Posts

À propos des méthodes singulières
À propos de la méthode de HttpServlet ()
À propos des méthodes Ruby
À propos des méthodes d'instance Ruby
À propos de l'appel des méthodes d'instance
À propos des méthodes de validation dans JUnit
A propos de l'attribution d'un nom aux méthodes de modèle Rails
À propos de la méthode Pluck et de la méthode ID
À propos =
Méthode de classe variable de classe Java
[Ruby] Méthodes singulières et classes singulières
À propos des méthodes fréquemment utilisées dans la conception
À propos des méthodes Java statiques et non statiques
À propos des méthodes equals () et hashcode ()
[Pour nos nouveaux arrivants] À propos des méthodes isXXX
À propos de method.invoke
À propos de Kotlin
À propos de Hinemos
Méthodes Java
À propos de l'héritage
À propos de Docker
À propos des rails 6
À propos d'énumération
À propos du polymorphisme
À propos facultatif
À propos du hachage
À propos de JitPack
À propos de ça ()
Méthodes Java
À propos de l'encapsulation
À propos de JAVA_HOME
À propos de statique
À propos des exceptions
À propos de la portée
[Maven] À propos de Maven
À propos des expressions régulières Ruby (méta-caractères, captures, méthodes associées)