** Ich habe die Bedeutung von Instanzvariablen irgendwie verstanden, aber wie verwende ich lokale Variablen, Instanzvariablen und Klassenvariablen schließlich richtig? ** ** ** Für eine Person wie mich in der Vergangenheit. Ich denke, dass selbst Anfänger es schreiben können, damit sie es verstehen können, indem sie es lesen.
** Denken Sie nur an den Bereich der Variablen, die Sie verwenden möchten. ** ** ** ** Mit anderen Worten, betrachten Sie den Bereich (den Bereich, in dem Variablen und Methoden aufgerufen werden können) </ font>. ** ** ** Ich werde es unten erklären.
Jeder hat einen anderen Umfang.
Setzen Sie kein @ vor den Variablennamen. ** Kann nur innerhalb der definierten Methode oder Klasse aufgerufen werden. ** ** ** Wenn Sie versuchen, es außerhalb des Gültigkeitsbereichs aufzurufen, wird der Fehler "undefinierte lokale Variable oder Methode" für main: Object (NameError) "angezeigt.
Beispiel 1 Die Variable Morgen kann nur innerhalb der Methodemorgen_nachricht verwendet werden
local_variable.rb
def morning_message
morning = "Morgen"
puts "#{morning}ist"
end
morning_message # =>Es ist Morgen
puts morning # => undefined local variable or method `morning' for main:Object (NameError)
Beispiel 2 Wenn direkt in der Klasse definiert, kann es nur innerhalb der Morning-Klasse und außerhalb von self.message verwendet werden.
local_variable.rb
class Morning
morning = "Morgen"
def self.message
puts "#{morning}ist"
end
self.message # => undefined local variable or method `morning' for Morning:Class (NameError)
end
Fügen Sie am Anfang @ hinzu. ** Kann an einer beliebigen Stelle innerhalb einer Methode derselben Klasse aufgerufen werden. ** ** ** Sie kann auch mit einer anderen Methode als der Initialisierungsmethode definiert werden. Wenn Sie versuchen, es außerhalb des Gültigkeitsbereichs aufzurufen, wird nil zurückgegeben.
Beispiel 1 Das in der Initialisierungsmethode definierte "@ color" kann auch in der put_color-Methode verwendet werden.
instance_variable.rb
class Color
def initialize(color)
@color = color
end
def put_color
puts @color
end
end
color1 = Color.new("Blau")
color1.put_color # =>Blau
p @color # => nil
Beispiel 2 Definieren Sie eine andere Instanzvariable als die Initialisierungsmethode
instance_variable.rb
class Color
def initialize(color)
@color = color
end
def rank
if @color == "Blau"
@rank = "A"
elsif @color == "rot"
@rank = "B"
end
end
def explain
puts "#{@color}Rang ist#{@rank}ist"
end
end
color1 = Color.new("Blau")
color2 = Color.new("rot")
color1.rank
color1.explain # =>Blauer Rang ist A.
color2.rank
color2.explain # =>Roter Rang ist B.
Fügen Sie am Anfang @@ hinzu. ** Kann überall in der Klasse aufgerufen werden. ** ** ** Instanzvariablen haben für jede Instanz unterschiedliche Werte, während Klassenvariablen innerhalb der Klasse gemeinsame Werte haben. Wenn Sie versuchen, es außerhalb des Gültigkeitsbereichs aufzurufen, wird der Fehler "nicht initialisierte Klassenvariable @@ 〇〇〇 in Object (NameError)" angezeigt.
Beispiel @@ monitor
ist für color1 und 2 gleich
class_variable.rb
class Color
@@monitor = "Monitor 1"
def initialize(color)
@color = color
end
def rank
if @color == "Blau"
@rank = "A"
elsif @color == "rot"
@rank = "B"
end
end
def explain
puts "#{@@monitor}von#{@color}vonランクは#{@rank}ist"
end
end
color1 = Color.new("Blau")
color2 = Color.new("rot")
color1.rank
color1.explain # =>Monitor 1 hat einen blauen Rang von A.
color2.rank
color2.explain # =>Monitor 1 hat einen roten Rang von B.
puts @@monitor #=> uninitialized class variable @@monitor in Object (NameError)
Ein Typ einer Instanzvariablen, bei der es sich um eine Instanzvariable handelt, die der Klasse selbst gehört (= direkt in der Klasse definiert). Fügen Sie also am Anfang auch @ hinzu. Der Unterschied zu normalen Instanzvariablen besteht in der Position und dem Umfang der Definition. ** Im Gegensatz zu Instanzvariablen können sie nicht aus untergeordneten Klassen referenziert werden. ** (Aufgrund des Unterschieds zwischen Instanzmethode und Klassenmethode)
Beispiel Klasseninstanzvariablen können nicht von untergeordneten Klassen referenziert werden
class_instance_variable.rb
class Color
@color = "Blau"
def self.put_color
puts @color
end
end
class DarkColor < Color
def self.put_dark_color
puts "Dunkel#{@color}"
end
end
Color.put_color # =>Blau
DarkColor.put_dark_color # =>Dunkel ... Blau wird nicht ausgegeben
Fügen Sie $ am Anfang hinzu. ** Sie können es überall in Ihrem Projekt aufrufen. ** ** ** Da der Bereich zu groß ist, wird der Variablenname möglicherweise unbeabsichtigt abgedeckt und der Inhalt wird möglicherweise neu geschrieben. Verwenden Sie ihn daher nur, wenn dies unbedingt erforderlich ist.
Beispiel $ Helligkeit kann überall aufgerufen und neu geschrieben werden
global_variable.rb
$brightness = 2000
class Color
def initialize(color)
@color = color
end
def explain
puts "Das#{@color}Die Helligkeit von#{$brightness}nt"
end
end
color1 = Color.new("Blau")
color2 = Color.new("rot")
color1.explain # =>Seine blaue Helligkeit beträgt 2000nt
$brightness = 100000
color2.explain # =>Seine rote Helligkeit beträgt 100000nt
Wenn Sie Eindrücke, Meinungen oder Vorschläge zu diesem Artikel haben, teilen Sie uns dies bitte mit.
https://techacademy.jp/magazine/9704 https://qiita.com/tomokichi_ruby/items/a2548176d85457f622a4 https://qiita.com/shun_takagi/items/cba48fbe8c4de81b3fac http://simanman.hatenablog.com/entry/2013/03/11/210756
Recommended Posts