Nommer et appeler explicitement des méthodes de classe parent dans Ruby

Réimprimé à partir de Article de blog.

Appelle sa propre méthode parente

Vous pouvez utiliser super pour appeler une méthode parent avec le même nom que lui-même.

  def value
    "Super#value"
  end
end

class Sub < Super
  def value
    # Super#Valeur d'appel
    super
  end
end

p Sub.new.value
# => "Super#value"

Alors que faire si vous voulez appeler une méthode parent arbitraire à partir d'une méthode différente?

class Super
  def value
    "Super#value"
  end
end

class Sub < Super
  def value
    "Sub#value"
  end

  def value2
    #Ici Super#Je veux appeler la valeur
  end
end

Réponse: Utilisez Method # super_method

Dans ce cas, vous pouvez utiliser Method # super_method. Obtenez n'importe quel objet méthode comme suit et utilisez # super_method pour obtenir l'objet méthode parent.

class Super
  def value
    "Super#value"
  end
end

class Sub < Super
  def value
    "Sub#value"
  end

  def value2
    #Obtient l'objet de méthode de valeur et référence sa méthode parente
    method(:value).super_method.call
  end
end

p Sub.new.value2
# => "Super#value"

prime

Vous pouvez également utiliser .instance_method pour appeler une méthode de n'importe quelle classe comme indiqué ci-dessous.

class Super
  def value
    "Super#value"
  end
end

class Sub < Super
  def value
    "Sub#value"
  end

  def value2
    Super.instance_method(:value).bind(self).call
  end
end

p Sub.new.value2
# => "Super#value"

Recommended Posts

Nommer et appeler explicitement des méthodes de classe parent dans Ruby
J'ai essayé de créer une classe parent d'objet de valeur dans Ruby
Obtenez le nom de classe et le nom de méthode du contrôleur exécuté par le HandlerInterceptor de Spring Boot
Je veux appeler une méthode d'une autre classe
super n'appelle pas seulement les méthodes de la classe parent
[Ruby / Rails] Définissez une valeur unique (unique) dans la classe
[Java] Informations entières des caractères du fichier texte acquises par la méthode read ()
Ecrire un test en mettant en œuvre l'histoire de M. Nabeats dans le monde avec du rubis
Mémo de support temporaire lorsque le nom du paramètre de méthode de la classe Java ne peut pas être obtenu par réflexion dans le projet de plug-in Eclipse
Comment obtenir le nom d'une classe / méthode exécutée en Java
[Ruby] Prenez l'habitude d'utiliser la méthode dup lors de la copie d'une variable chaîne
Appelez la super méthode en Java
[Ruby] Relation entre la classe parent et la classe enfant. Relation entre classe et instance.
Créez un calendrier à partir de la classe Calendar en spécifiant l'année et le mois
J'ai vérifié le nom du package référencé par la classe contenue dans le fichier JAR
Trier par plusieurs champs dans la classe
Comment référencer une colonne lors du remplacement de la méthode de nom de colonne dans ActiveRecord
Partie de la classe appelée à partir de la classe testée dans le mémo de méthode JMockit Mock
Obtenez le chemin défini dans la classe Controller de Spring Boot sous forme de liste
La cause n'est pas visible lors de l'appel de méthodes d'autres classes en java
[Order method] Définit l'ordre des données dans Rails
[Ruby] Résumé des définitions de classe. Maîtrisez les bases.
Empêcher les erreurs dans le nom de l'enregistreur en copiant
[Java] Gestion des Java Beans dans la chaîne de méthodes
[Java] Appel de méthode dynamique par réflexion du type enum (enum)
Appel de méthode Java depuis RPG (appel de méthode dans sa propre classe)
Mesurer la taille d'un dossier avec Java
Recommandation de classe de service dans Ruby on Rails
Un examen rapide de Java appris en classe
Nom de méthode de la chaîne de méthodes dans Java Builder + α
Comment obtenir le nom de classe de l'argument de LoggerFactory.getLogger lors de l'utilisation de SLF4J en Java
Compter la fréquence d'apparition des mots dans une phrase par traitement de flux (Apache Apex)
Une revue du code utilisé par les rails débutants
[Ruby] Découpez une chaîne de caractères à l'aide de la méthode slice
Format de la sortie du journal par Tomcat lui-même dans Tomcat 8
[Kotlin] Récupère le nom de l'argument du constructeur par réflexion
[Ruby] Le rôle des indices dans l'apprentissage des éléments dans les tableaux
Examinez les éléments du tableau à l'aide de la méthode [Ruby] includes?
Ecrire une classe en Kotlin et l'appeler en Java
Calculer la différence entre les nombres dans un tableau Ruby
Comment se moquer d'un appel de super méthode dans PowerMock
Un examen rapide de Java appris en classe part3
Ruby, Nokogiri: récupère le nom de l'élément du nœud sélectionné
Un examen rapide de Java appris en classe part2
[Ruby] Imbrication de classes, héritage et principes de base de soi
Obtenez l'URL de la destination de la redirection HTTP dans Ruby
Pourquoi la méthode get est nécessaire dans la classe Calendar
Récapitulez les éléments supplémentaires de la classe Optional dans Java 9
[Ruby] Penser quand il n'y a pas de récepteur devant la méthode (ça ressemble à)
gestion des erreurs wsimport (une classe / interface avec le même nom "xxx" est déjà utilisée)
définition de la méthode ruby
[Ruby] Comptez un nombre pair dans un tableau en utilisant la méthode pair?