[RAILS] Ich habe versucht, Rubys "Klassen" -Probleme zu sammeln und zu lösen.

Ich kenne die Ruby-Klasse nicht

Ich dachte, ich würde das Cherry-Buch lesen und es ausgeben, aber es ist schwierig, selbst ein Programm zu erstellen. .. ..

Ich habe ** Grundprobleme ** für diejenigen gesammelt, die die gleichen Probleme haben wie ich.

Selbst wenn es sich um ein Grundproblem handelt, können Sie es möglicherweise nicht verstehen, wenn Sie dieses Problem mit vage Kenntnissen lösen.

Wenn möglich, denke ich, ist es besser, fortzufahren, ohne auf die Antwort zu schauen, aber wenn Sie nicht auf alle Fälle verstehen, werde ich die Antwort am Ende des Artikels schreiben, also beziehen Sie sich bitte darauf.

Und da ich selbst sagte, dass ich selbst nach dem Lesen der Antwort nicht verstehen konnte, werde ich die Punkte beschreiben, die ich nicht verstanden habe.

Problem (3 Fragen)

① Informationen zu Klassenvariablen und Klassenmethoden

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

Ich habe auf [Probleme mit diesem Artikel] verwiesen (https://www.oiax.jp/rails/ruby-ex/class_variable_and_class_method.html).

Wenn ich das obige Programm ausführe, wird eine Fehlermeldung angezeigt. Bitte korrigieren Sie einige Teile und ändern Sie die Quelle so, dass die Ausgabe wie erwartet ist.

(Erwartete Ausgabe) -Das Aufrufen der Instanzmethode `` `run``` erhöht den gemeinsam genutzten Klassenzähler um 1.

Wenn 3 angezeigt wird, ist es in Ordnung.

Die folgenden Artikel waren sehr hilfreich bei der Lösung dieses Problems. https://qiita.com/mogulla3/items/cd4d6e188c34c6819709

② Singuläre Methode

Ich habe [diesen Artikel] zitiert (http://www.minituku.net/courses/500228005/contents/228585781.html).

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.

Bitte ändern Sie den Code so, dass die Ausgabe wie auskommentiert ist.

③ Definieren Sie eine Rap-Klasse, die die Musikklasse erbt

Ich habe auf [diesen Artikel] verwiesen (http://www.minituku.net/courses/500228005/contents/767771771.html).

Sagen Sie den Code, der in die Rap-Klasse geschrieben werden soll, aus dem folgenden Ausgabeergebnis voraus.

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

(Ausgabebeispiel)

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

-* * * * * * * * * * * Antworten * * * * * * * * * * *-

① Informationen zu Klassenvariablen und Klassenmethoden

Sie können es nur lösen, wenn Sie verstehen, wie Klassenvariablen und Klassenmethoden verwendet werden.

--Klassen und ihre Instanzen haben einen Gültigkeitsbereich

Die folgenden Artikel waren hilfreich und sehr hilfreich bei der Lösung dieses Problems. https://qiita.com/mogulla3/items/cd4d6e188c34c6819709

Zuallererst sind die zu betrachtenden Punkte ** 2, 6 Linien **.

sample.rb


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

  def count #6. Zeile
    @@count
  end
end

car1 = Car.new
car1.run

car2 = Car.new

car2.run
car1.run

puts Car.count

Hast du es nicht bemerkt?

Schauen Sie sich die letzte Zeile an.

puts Car.count



 Dies scheint die Methode zur Zählung der Fahrzeugklasse zu überhängen, ist das nicht seltsam?

 Beim Aufruf der Klasse muss die Klassenmethode ausgegeben werden.

 Wenn Sie es beheben


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

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

  def self.count #6. Zeile
    @@count
  end
end

#-Unterlassung-

puts Car.count #Letzte Linie

Und die zweite Zeile ist auch seltsam.

Dies muss eine Instanzmethode sein.

sample.rb


class Car
  def run #2. Zeile/def self.Wechsel vom Lauf
    @@count += 1
  end
end

car1 = Car.new
car1.run

Da die Klasse eine Instanz mit `` `car1``` erstellt, muss es sich um eine Instanzmethode handeln, um diese Instanz aufzurufen.

Aber das ist nicht das Ende.

** Die Klassenvariable `` `@@ count``` ist nicht definiert. ** **.

sample.rb


class Car
  @@count = 0 #Definition von Klassenvariablen

  def run #Klassenmethode
    @@count += 1 #@@count ist eine Klassenvariable
  end

  def self.count #Instanzmethode
    @@count
  end
end

car1 = Car.new
car1.run

car2 = Car.new

car2.run
car1.run

puts Car.count

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

Das ist okay

② Singuläre Methode

Was ist überhaupt eine singuläre Methode? ** Bezieht sich auf eine instanzspezifische Methode. ** **.

Singuläre Methoden können mit `def Objektname definiert werden. Methodenname `. https://qiita.com/k-penguin-sato/items/d637dced7af32e4ec7c0

Deshalb,

food.rb


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

#--hinzufügen--↓

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

def karaage.eat
  puts "I love."
end

#--hinzufügen--↑

natto.eat
wasabi.eat
karaage.eat

Definieren Sie Methoden mit demselben Namen, aber unterschiedlichem Verhalten für Objekte, die Instanzen derselben Klasse sind.

Dies ist eine singuläre Methode, die nicht für die Klasse gilt, sondern für die aus der Klasse erstellten Instanzen.

Daher können Sie von jeder Methode ausgeben.

(Ergebnis)

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

③ Definieren Sie eine Rap-Klasse, die die Musikklasse erbt

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: Konvertiert den Klassennamen der Instanz selbst, die wie `` `Rap.new``` erstellt wurde, in eine Zeichenfolge.

Jetzt erstellen wir eine Rap-Klasse.

sample.rb


#--Unterlassung--
class Rap < Music
end

Schauen Sie sich die Ausgabezeichen an.

Yo, mic check 1, 2.



 Da es sich um eine Ausgabe handelt, die nicht in der Music-Klasse definiert ist, geben wir sie in der Rap-Klasse aus.

 Wenn Sie sich `` `Rap.new (" mc-Battle "). Mc``` in der letzten Zeile ansehen, verwendet die Methode` `` mc```, also werde ich es beschreiben.


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

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

Da erbt die Musikklasse, wenn Sie den notwendigen Teil beschreiben

sample.rb


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

Dies ist jedoch nicht das Ende.

Wir konnten die Musikklasse zu diesem Zeitpunkt noch nicht anrufen.

Was soll ich machen?

** Führen Sie die "Super" -Methode aus. ** **.

Die Supermethode * findet und führt eine Methode in der Oberklasse aus, die denselben Methodennamen wie die aufgerufene Methode hat. ** **.

Dann, wenn Sie neu schreiben

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 #Zusätzlicher Code
    puts "Yo, mic check 1, 2."
  end
end

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

erledigt.

Recommended Posts

Ich habe versucht, Rubys "Klassen" -Probleme zu sammeln und zu lösen.
Ich habe versucht, AOJs binäre Suche zu lösen
Ich habe versucht, polymorph in Nogizaka zu implementieren.
Ich habe versucht, grafana und postgres [docker-compose] zu verknüpfen
Ich habe versucht, JavaFX und Spring Framework zu verknüpfen.
[Java] Ich habe versucht, Paizas B-Rang-Problem zu lösen
Ich habe MySQL 5.7 mit Docker-Compose gestartet und versucht, eine Verbindung herzustellen
Ich habe versucht, AWS I oT Button und Slack zu integrieren
Ich habe versucht, AOJs Small, Large oder Equal zu lösen
Ich habe versucht, C # zu kauen (Dateien lesen und schreiben)
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
Ich habe versucht, dies und das von Spring @ Transactional zu überprüfen
Ich habe versucht, Java Optional und Guard-Klausel koexistieren zu lassen
Ich habe versucht, persönlich nützliche Apps und Entwicklungstools (Entwicklungstools) zusammenzufassen.
Ich habe versucht, persönlich nützliche Apps und Entwicklungstools (Apps) zusammenzufassen.
Ich habe versucht, yum-cron zu verifizieren
Ich habe versucht, die Ergebnisse vor und nach der Date-Klasse mit einer geraden Zahl auszudrücken
Ich habe versucht, das Problem der "mehrstufigen Auswahl" mit Ruby zu lösen
Ich habe versucht, Docker und Maven / Netbean mit Jib gut zu integrieren
[Tipps] So lösen Sie Probleme mit XCode und Swift für Anfänger
Ich habe versucht, die Methoden von Java String und StringBuilder zusammenzufassen
Ich habe versucht, das Paiza-Kampagnenproblem "Herausforderung von Phantomdieb 813" zu lösen.
Ich habe getestet, wie man Rubys Test / Gerät und Janken's Code verwendet.
Ich habe versucht, das Problem des Google Tech Dev Guide zu lösen
Ich habe versucht, C # (Indexer) zu kauen.
Ich habe versucht, die Unterstützung für iOS 14 zusammenzufassen
Ich habe versucht, mit Java zu interagieren
Ich habe versucht, die Methode zu erklären
Ich habe versucht, das Java-Lernen zusammenzufassen (1)
Ich habe jetzt versucht, Java 8 zusammenzufassen
C # (Polymorphismus: Polymorphismus)
Ich habe Java und Rubys FizzBuzz verglichen.
Ich habe versucht, Active Hash zu erklären
Ich habe versucht, ein übergeordnetes Wertklasseobjekt in Ruby zu erstellen
Ich habe versucht, die wichtigsten Punkte des gRPC-Designs und der Entwicklung zusammenzufassen
Ich habe versucht, mit OpenTrip Planner und GTFS eine eigene Übertragungsanleitung zu erstellen
Ich habe einen Arbitrage-Transaktionsbot für virtuelle Währungen erstellt und versucht, Geld zu verdienen
Ich habe versucht, das Problem der Tribonacci-Sequenz in Ruby mit Wiederholung zu lösen.
Ich habe versucht, die Geschwindigkeit von Graal VM mit JMH zu messen und zu vergleichen
Ich habe versucht, die verwendeten Methoden zusammenzufassen
Ich habe versucht, Processing auf VS Code zu migrieren
Ich habe versucht, Java-Lambda-Ausdrücke zusammenzufassen
Ich habe versucht, mit Web Assembly zu beginnen
Java-Implementierung zum Erstellen und Lösen von Labyrinthen
Ich habe versucht, das Iterator-Muster zu implementieren
Ich habe versucht, die Stream-API zusammenzufassen
Ich habe versucht, AdoptOpenjdk 11 unter CentOS 7 zu erstellen
Was ist Docker? Ich habe versucht zusammenzufassen
Ich habe versucht, Selen wie JQuery zu verwenden
Ich habe versucht, JavaScript Part.2 Objektorientiert zu berühren
Eine Geschichte, als ich versuchte, ein Video zu erstellen, indem ich Processing und Resolume verknüpfte
Ich habe versucht, das Problem der Tribonacci-Sequenz in Ruby zu lösen (Zeitlimit 10 Minuten).
Ich habe versucht zu überprüfen, ob es Spaß machen würde, "Programmierung" und "Hobbys" zu kombinieren.
Ich habe versucht, automatisch eine Klasse zu generieren, um sie mit APT von einer Datenklasse in ein Bundle zu konvertieren