** J'ai en quelque sorte compris la signification des variables d'instance, mais comment utiliser correctement les variables locales, les variables d'instance et les variables de classe après tout? ** ** À une personne comme moi dans le passé. Je pense que même les débutants peuvent l'écrire pour le comprendre en le lisant.
** Pensez simplement à la gamme de variables que vous souhaitez utiliser. ** ** ** En d'autres termes, la portée (la plage dans laquelle les variables et les méthodes peuvent être appelées) doit être considérée </ font>. ** ** Je vais l'expliquer ci-dessous.
Chacun a une portée différente.
Ne mettez aucun @ devant le nom de la variable. ** Peut être appelé uniquement dans la méthode ou la classe définie. ** **
Si vous essayez de l'appeler hors de portée, vous obtiendrez l'erreur ʻune variable ou méthode locale non définie
〇〇〇'for main: Object (NameError)
.
Exemple 1 La variable morning ne peut être utilisée que dans la méthode morning_message
local_variable.rb
def morning_message
morning = "Matin"
puts "#{morning}est"
end
morning_message # =>C'est le matin
puts morning # => undefined local variable or method `morning' for main:Object (NameError)
Exemple 2 S'il est défini directement dans la classe, il ne peut être utilisé qu'à l'intérieur de la classe Morning et à l'extérieur de self.message.
local_variable.rb
class Morning
morning = "Matin"
def self.message
puts "#{morning}est"
end
self.message # => undefined local variable or method `morning' for Morning:Class (NameError)
end
Ajoutez @ au début. ** Peut être appelé n'importe où dans une méthode de la même classe. ** ** Il peut également être défini par une méthode autre que la méthode initialize. Si vous essayez de l'appeler hors de portée, nil sera retourné.
Exemple 1 Le @ color
défini dans la méthode initialize peut également être utilisé dans la méthode put_color.
instance_variable.rb
class Color
def initialize(color)
@color = color
end
def put_color
puts @color
end
end
color1 = Color.new("Bleu")
color1.put_color # =>Bleu
p @color # => nil
Exemple 2 Définir une variable d'instance autre que la méthode initialize
instance_variable.rb
class Color
def initialize(color)
@color = color
end
def rank
if @color == "Bleu"
@rank = "A"
elsif @color == "rouge"
@rank = "B"
end
end
def explain
puts "#{@color}Le rang est#{@rank}est"
end
end
color1 = Color.new("Bleu")
color2 = Color.new("rouge")
color1.rank
color1.explain # =>Le rang bleu est A
color2.rank
color2.explain # =>Le rang rouge est B
Ajoutez @@ au début. ** Peut être appelé n'importe où dans la classe. ** ** Les variables d'instance ont des valeurs différentes pour chaque instance, tandis que les variables de classe ont des valeurs communes au sein de la classe. Si vous essayez de l'appeler hors de portée, vous obtiendrez l'erreur «variable de classe non initialisée @@ 〇〇〇 dans Object (NameError)».
L'exemple @@ monitor
est commun à color1 et 2
class_variable.rb
class Color
@@monitor = "Moniteur 1"
def initialize(color)
@color = color
end
def rank
if @color == "Bleu"
@rank = "A"
elsif @color == "rouge"
@rank = "B"
end
end
def explain
puts "#{@@monitor}de#{@color}deランクは#{@rank}est"
end
end
color1 = Color.new("Bleu")
color2 = Color.new("rouge")
color1.rank
color1.explain # =>Le moniteur 1 a un rang bleu de A
color2.rank
color2.explain # =>Le moniteur 1 a un rang rouge de B
puts @@monitor #=> uninitialized class variable @@monitor in Object (NameError)
Un type de variable d'instance, qui est une variable d'instance appartenant à la classe elle-même (= définie directement dans la classe). Alors ajoutez également @ au début. La différence avec les variables d'instance ordinaires est l'emplacement et la portée de la définition. ** Contrairement aux variables d'instance, elles ne peuvent pas être référencées à partir de classes enfants. ** (En raison de la différence entre la méthode d'instance et la méthode de classe)
Exemple Les variables d'instance de classe ne peuvent pas être référencées par les classes enfants
class_instance_variable.rb
class Color
@color = "Bleu"
def self.put_color
puts @color
end
end
class DarkColor < Color
def self.put_dark_color
puts "Sombre#{@color}"
end
end
Color.put_color # =>Bleu
DarkColor.put_dark_color # =>Foncé ... Le bleu n'est pas émis
Ajoutez $ au début. ** Vous pouvez l'appeler n'importe où dans votre projet. ** ** Étant donné que la portée est trop large, le nom de la variable peut être accidentellement couvert et le contenu peut être réécrit, utilisez-le uniquement lorsque cela est absolument nécessaire.
Exemple $ luminosité peut être appelé et réécrit n'importe où
global_variable.rb
$brightness = 2000
class Color
def initialize(color)
@color = color
end
def explain
puts "Cette#{@color}La luminosité de#{$brightness}NT"
end
end
color1 = Color.new("Bleu")
color2 = Color.new("rouge")
color1.explain # =>Sa luminosité bleue est de 2000nt
$brightness = 100000
color2.explain # =>Sa luminosité rouge est de 100000nt
Je vous serais reconnaissant de bien vouloir me faire part de vos réflexions, opinions et suggestions concernant cet article.
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