[Ruby] Imbrication de classes, héritage et principes de base de soi

introduction

Quelle est la gamme d'influence de l'héritage pendant le travail? .. Et Que signifie soi-même dans ce cas? .. Et Je ne pouvais comprendre que la partie de base moelleuse, alors cette fois

--Classe --Héritage - self --Nid

J'ai appris en écrivant, donc je vais l'écrire comme un disque. J'aimerais écrire sur les méthodes et les variables, mais j'aimerais les écrire séparément car cela semble long.

Héritage de classe

Vous pouvez spécifier une superclasse lors de la définition de la classe, S'il n'est pas spécifié à ce stade, la classe d'objets est automatiquement héritée. Par conséquent, chaque fois qu'une nouvelle classe est définie, elle hérite d'une classe. Ce sera toujours quelque part dans l'arbre d'héritage.

Cible d'hériter

--Méthode de classe super classe

De plus, bien qu'il ne soit pas hérité, vous pouvez également faire référence aux constantes de superclasse et aux variables de classe.

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

#Référence aux constantes de superclasse
puts B::VALUE
# => I'm VALUE

#Héritage des variables de classe
B.display_val
# => I'm class_val

self Puisque self fait référence à l'objet lui-même, le contenu changera en fonction de l'endroit où vous l'utilisez.

Dans l'exemple ci-dessous, nous avons pointé vers l '«objet instance» uniquement lorsqu'il est utilisé dans une méthode d'instance. De plus, puisque «self» utilisé lors de la définition d'une méthode de classe fait référence à un objet de classe Vous pouvez également spécifier le "self" du "self. Method name" directement dans le nom de la classe.

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

Imbrication de classes, etc.

Lors de la définition d'une classe, vous pouvez l'imbriquer dans d'autres classes. Il existe les deux modèles suivants comme méthode de définition, mais certains comportements changeront.

#Écrivez directement dans
class TopKlass
  class Klass
  end
end

## ------ ##

# ”::Utilisation
class TopKlass
end

class TopKlass::Klass
end

Différences de comportement selon la façon dont il est défini

Référence de constante

・ Décrivez directement dans Il fait référence aux constantes dans l'ordre de lui-même au niveau supérieur. Le flux consiste à se référer au niveau supérieur dans l'ordre du plus proche de lui-même, et enfin au niveau supérieur.

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

・ Décrit à l'aide d'un espace de noms S'il n'a pas de constante, il fait alors référence au niveau supérieur et ensuite dans l'ordre à partir de là vers sa classe.

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

Précisez s'il faut imbriquer dans la classe ou le module

· Décrit dans Puisque la classe ou le module est spécifié dans chaque hiérarchie, une erreur se produit si un module défini séparément est spécifié comme classe.

module TopKlass
end

class TopKlass
  class InnerKlass
  end
end

# => TopKlass is not a class (TypeError)

・ Décrit à l'aide d'un espace de noms Puisque c'est seulement celui décrit à la fin (extrême droite) qui spécifie s'il s'agit d'une classe ou non En dehors de cela, cela rend le jugement de la classe et du module flexible.

module TopKlass
end

class TopKlass::InnerKlass
end

#Pas d'erreur

Indique s'il faut lever une exception lorsqu'il n'y a pas d'objet d'imbrication

· Décrit dans Dans l'exemple ci-dessous, si TopKlass n'a pas été défini séparément Aucune exception ne se produira car TopKlass est nouvellement défini.

class TopKlass
  class InnerKlass
  end
end

・ Décrit à l'aide d'un espace de noms

Dans les cas suivants, une exception sera levée si TopKlass n'est pas défini séparément. Il ne définit pas un nouveau TopKlass.

class TopKlass::InnerKlass
end

# => uninitialized constant TopKlass (NameError)

fin

Recommended Posts

[Ruby] Imbrication de classes, héritage et principes de base de soi
[Ruby] Résumé des définitions de classe. Maîtrisez les bases.
Bases de Ruby
[Introduction à Ruby] À propos du rôle de true et break in the while statement
Ruby on Rails ~ Principes de base de MVC et du routeur ~
À propos de next () et nextLine () de la classe Scanner
[Pour les débutants] DI ~ Les bases de DI et DI au printemps ~
J'ai résumé les types et les bases des exceptions Java
[Note technique] À propos des avantages et des inconvénients de Ruby
Surveillance Docker-expliquant les bases des bases-
[GCD] Principes de base de la classe DispatchQueue
J'ai essayé de résumer les bases de kotlin et java
[Ruby] Questions et vérification du nombre d'arguments de méthode
Le nième et le n + 1er caractères d'une chaîne Ruby
Bases du branchement conditionnel et du retour
À propos des bases du développement Android
[Ruby] Relation entre la classe parent et la classe enfant. Relation entre classe et instance.
Les bases de SpringBoot + MyBatis + MySQL
[Bases de Ruby] méthode split et méthode to_s
Ceci et cela de JDK
[Ruby] Informations de base sur les classes Date, Heure et DateHeure
Diverses méthodes de la classe String
Lire les 4 premiers octets du fichier de classe Java et générer CAFEBABE
Bases de Ruby ~ Revue de difficile à comprendre ~
À propos de l'héritage orienté objet et du rendement Ruby
Bases de Ruby 2 ~ Revue des points difficiles ~
[Ruby] Afficher le contenu des variables
Facile à comprendre la différence entre la méthode d'instance Ruby et la méthode de classe.
[Ruby] Je souhaite extraire uniquement la valeur du hachage et uniquement la clé
[Ruby] Examinons l'arbre d'héritage tout en observant le flux de recherche de méthode
Afficher le calendrier et le jour japonais en utilisant la classe standard java8
[Challenge CircleCI from 0] Apprenez les bases de CircleCI
Comprendre les bases de l'enregistrement audio Android
[Ruby] Des bases à la méthode inject
Maintenant, j'ai résumé les bases de RecyclerView
Pliage et dépliage du contenu de la vue Recycleur
À propos du fonctionnement de next () et nextLine ()
Explication des objets Ruby Time et Date
[jour: 5] J'ai résumé les bases de Java
[Ruby] Coupez le contenu des publicités Twitter
Retour sur les bases de Java
Utilisation correcte de l'interface et de la classe abstraite
[Ruby] Distinction et utilisation des boucles dans Ruby
Comparaison des objets JavaScript et des classes Ruby
Bases de Ruby
Nommer et appeler explicitement des méthodes de classe parent dans Ruby
Obtenez le nom de classe et le nom de méthode du contrôleur exécuté par le HandlerInterceptor de Spring Boot