[RAILS] J'ai essayé de collecter et de résoudre les problèmes liés à la «classe» de Ruby.

Je ne connais pas la classe Ruby

Je pensais avoir lu le livre Cherry et le sortir, mais il est difficile de créer un programme par moi-même. .. ..

J'ai rassemblé des ** problèmes de base ** pour ceux qui ont les mêmes problèmes que moi.

Même s'il s'agit d'un problème de base, honnêtement, si vous résolvez ce problème avec de vagues connaissances, vous risquez de ne pas le comprendre.

Si possible, je pense qu'il vaut mieux continuer sans regarder la réponse, mais si vous ne comprenez pas par tous les moyens, j'écrirai la réponse en bas de l'article donc veuillez vous y référer.

Et puisque j'ai moi-même dit que je ne pouvais pas comprendre même si je lisais la réponse, je vais décrire les points que je n'ai pas compris.

Problème (3 questions)

① À propos des variables de classe et des méthodes de classe

sample.rb


class Car
  def self.run
    @@count += 1
  end

  def count
    @@count
  end
end

car1 = Car.new
car1.run

car2 = Car.new

car2.run
car1.run

puts Car.count

J'ai fait référence à Problèmes avec cet article.

● <Problème> Lorsque j'exécute le programme ci-dessus, j'obtiens une erreur. Veuillez corriger certaines parties et changer la source afin que la sortie soit comme prévu.

(Production attendue) -Appeler la méthode d'instance run '' incrémente le compteur partagé de classe de 1. -Appeler la méthode de classe count`` `` retourne la valeur actuelle du compteur.

Si 3 est affiché, c'est correct.

Les articles suivants ont été très utiles pour résoudre ce problème. https://qiita.com/mogulla3/items/cd4d6e188c34c6819709

② Méthode singulière

J'ai cité cet article.

food.rb


class Food
  def eat
    puts "I like."
  end
end
 
natto = Food.new()
wasabi = Food.new()
karaage = Food.new()

natto.eat #=>I like.
wasabi.eat #=>I don't like.
karaage.eat #=>I love.

● <Problème> Veuillez changer le code pour que la sortie soit comme commentée.

③ Définissez une classe Rap qui hérite de la classe Music

J'ai fait référence à cet article.

● <Problème> Prédisez le code à écrire dans la classe Rap à partir du résultat de sortie ci-dessous.

sample.rb


class Music
  def mc
    puts "This is #{@genre} of #{self.class.to_s}"
  end
 
  def initialize(genre)
    @genre = genre
  end
end

Rap.new("mc-battle").mc

(Exemple de sortie)

This is mc-battle of Rap
Yo, mic check 1, 2.

-* * * * * * * * * * * Répondre * * * * * * * * * * *-

① À propos des variables de classe et des méthodes de classe

Vous ne pouvez pas le résoudre à moins de comprendre comment utiliser les variables de classe et les méthodes de classe.

Les articles suivants ont été utiles et très utiles pour résoudre ce problème. https://qiita.com/mogulla3/items/cd4d6e188c34c6819709

Tout d'abord, les points à examiner sont ** 2, 6 lignes **.

sample.rb


class Car
  def self.run #2e ligne
    @@count += 1
  end

  def count #6ème ligne
    @@count
  end
end

car1 = Car.new
car1.run

car2 = Car.new

car2.run
car1.run

puts Car.count

Vous n'avez pas remarqué?

Regardez la dernière ligne.

puts Car.count



 Cela semble dépasser la méthode de comptage des classes de voitures, n'est-ce pas étrange?

 Lors de l'appel de la classe telle quelle, la méthode de classe doit être émise.

 Si vous le réparez


#### **`sample.rb`**
```rb

class Car
  def self.run #2e ligne
    @@count += 1
  end

  def self.count #6ème ligne
    @@count
  end
end

#-Omission-

puts Car.count #Dernière ligne

Et la deuxième ligne est également étrange.

Cela doit être une méthode d'instance.

sample.rb


class Car
  def run #2e ligne/def self.Changement de course
    @@count += 1
  end
end

car1 = Car.new
car1.run

Étant donné que la classe crée une instance avec `` car1 '', il doit s'agir d'une méthode d'instance en tant que méthode pour appeler cette instance.

Mais ce n'est pas la fin.

** La variable de classe `` @@ count '' n'est pas définie. ** **

sample.rb


class Car
  @@count = 0 #Définition des variables de classe

  def run #Méthode de classe
    @@count += 1 #@@count est une variable de classe
  end

  def self.count #Méthode d'instance
    @@count
  end
end

car1 = Car.new
car1.run

car2 = Car.new

car2.run
car1.run

puts Car.count

# => $ ruby sample.rb 
# => 3

C'est d'accord.

② Méthode singulière

Qu'est-ce qu'une méthode singulière en premier lieu? ** Fait référence à une méthode spécifique à une instance. ** **

Les méthodes singulières peuvent être définies avec nom d'objet par défaut. Nom de méthode` ``. https://qiita.com/k-penguin-sato/items/d637dced7af32e4ec7c0

Donc,

food.rb


class Food
  def eat
    puts "I like."
  end
end
 
natto = Food.new()
wasabi = Food.new()
karaage = Food.new()

#--ajouter à--↓

def wasabi.eat
  puts "I don't like."
end

def karaage.eat
  puts "I love."
end

#--ajouter à--↑

natto.eat
wasabi.eat
karaage.eat

Définissez des méthodes portant le même nom mais des comportements différents pour les objets qui sont des instances de la même classe.

Il s'agit d'une méthode singulière, qui n'est pas pour la classe, mais pour les instances créées à partir de la classe.

Par conséquent, vous pouvez générer chaque méthode.

(résultat)

I like.
I don't like.
I love.

③ Définissez une classe Rap qui hérite de la classe Music

sample.rb


class Music
  def mc
    puts "This is #{@genre} of #{self.class.to_s}"
  end

  def initialize(genre)
    @genre = genre
  end
end

Rap.new("mc-battle").mc

- Self.class.to_s: Convertit le nom de classe de l'instance elle-même créée comme `` Rap.new '' en une chaîne de caractères.

Maintenant, créons Rap class` ''.

sample.rb


#--Omission--
class Rap < Music
end

Regardez les caractères de sortie.

Yo, mic check 1, 2.



 Puisqu'il s'agit d'une sortie qui n'est pas définie dans la classe Music, nous la sortirons dans la classe Rap.

 Si vous regardez `` `Rap.new (" mc-battle "). Mc``` sur la dernière ligne, la méthode utilise` `mc```, donc je vais la décrire.


#### **`sample.rb`**
```rb

#--Omission--
class Rap < Music
  def mc
  end
end

Puisqu'il hérite de la `` Classe de musique '', si vous décrivez la partie nécessaire

sample.rb


#--Omission--
class Rap < Music
  def mc
    puts "Yo, mic check 1, 2."
  end
end

Mais ce n’est pas la fin.

Nous n'avons pas pu appeler le cours de musique pour le moment.

Que devrais-je faire?

** Exécutez la méthode "super". ** **

La super méthode * trouve et exécute une méthode dans la superclasse qui a le même nom de méthode que la méthode appelée. ** **

Ensuite, si vous réécrivez

sample.rb


class Music
  def mc
    puts "This is #{@genre} of #{self.class.to_s}"
  end
 
  def initialize(genre)
    @genre = genre
  end
end

class Rap < Music
  def mc
    super #Code supplémentaire
    puts "Yo, mic check 1, 2."
  end
end

Rap.new("mc-battle").mc

terminé.

Recommended Posts

J'ai essayé de collecter et de résoudre les problèmes liés à la «classe» de Ruby.
J'ai essayé de résoudre la recherche binaire d'AOJ
J'ai essayé d'implémenter des relations polymorphes à Nogizaka.
J'ai essayé de lier grafana et postgres [docker-compose]
J'ai essayé de lier JavaFX et Spring Framework.
[Java] J'ai essayé de résoudre le problème de rang B de Paiza
J'ai démarré MySQL 5.7 avec docker-compose et j'ai essayé de me connecter
J'ai essayé d'intégrer le bouton AWS I oT et Slack
J'ai essayé de résoudre Small, Large ou Equal d'AOJ
J'ai essayé de mâcher C # (lire et écrire des fichiers)
J'ai essayé de résumer les bases de kotlin et java
J'ai essayé de vérifier ceci et celui de Spring @ Transactional
J'ai essayé de faire coexister Java Optional et la clause de garde
J'ai essayé de résumer les applications et les outils de développement personnellement utiles (outils de développement)
J'ai essayé de résumer les applications et les outils de développement personnellement utiles (Apps)
J'ai essayé de vérifier yum-cron
J'ai essayé d'exprimer les résultats avant et après de la classe Date avec une ligne droite numérique
J'ai essayé de résoudre le problème de la "sélection multi-étapes" avec Ruby
J'ai essayé d'intégrer parfaitement Docker et Maven / Netbean en utilisant Jib
[Astuces] Comment résoudre les problèmes avec XCode et Swift pour les débutants
J'ai essayé de résumer les méthodes de Java String et StringBuilder
J'ai essayé de résoudre le problème de la campagne paiza "Challenge from Phantom Thief 813"
J'ai testé comment utiliser le test / l'unité de Ruby et le code de Janken.
J'ai essayé de résoudre le problème de Google Tech Dev Guide
J'ai essayé de mâcher C # (indexeur)
J'ai essayé de résumer le support d'iOS 14
J'ai essayé d'interagir avec Java
J'ai essayé d'expliquer la méthode
J'ai essayé de résumer l'apprentissage Java (1)
J'ai essayé de résumer Java 8 maintenant
C # (polymorphisme: polymorphisme)
J'ai comparé Java et Ruby FizzBuzz.
J'ai essayé d'expliquer Active Hash
J'ai essayé de créer une classe parent d'objet de valeur dans Ruby
J'ai essayé de résumer les points clés de la conception et du développement de gRPC
J'ai essayé de créer mon propre guide de transfert en utilisant OpenTrip Planner et GTFS
J'ai créé un bot de transaction d'arbitrage de monnaie virtuelle et essayé de gagner de l'argent
J'ai essayé de résoudre le problème de la séquence Tribonacci en Ruby, avec récurrence.
J'ai essayé de mesurer et de comparer la vitesse de Graal VM avec JMH
J'ai essayé de résumer les méthodes utilisées
J'ai essayé de migrer le traitement vers VS Code
J'ai essayé de résumer les expressions Java lambda
J'ai essayé de démarrer avec Web Assembly
Implémentation Java pour créer et résoudre des labyrinthes
J'ai essayé d'implémenter le modèle Iterator
J'ai essayé de résumer l'API Stream
J'ai essayé de construire AdoptOpenjdk 11 sur CentOS 7
Qu'est-ce que Docker? J'ai essayé de résumer
J'ai essayé d'utiliser Selenium comme JQuery
J'ai essayé de toucher JavaScript Part.2 orienté objet
Une histoire où j'ai essayé de faire une vidéo en liant Traitement et Resolume
J'ai essayé de résoudre le problème de la séquence Tribonacci en Ruby (temps limite 10 minutes)
J'ai essayé de vérifier si ce serait amusant de combiner «programmation» et «hobbies».
J'ai essayé de générer automatiquement une classe à convertir d'une classe de données en un bundle avec APT