Une méthode qui lit et écrit la valeur d'une variable d'instance. Ruby est conçu pour que les variables d'instance ne soient pas accessibles telles quelles.
(Exemple)
class Animal
@name = ""
end
animal = Animal.new
animal.name = "cat"
puts animal.name # => ruby.rb:6:in `<main>': undefined method `name=' for #<Animal:0x00007fce4a8b4b40> (NoMethodError)
Selon cette méthode de définition de code, @name est défini comme une variable différente appelée "variable d'instance de classe", qui est inaccessible depuis l'instance.
Comment définir les variables d'instance accessibles à partir de l'instance?
Par conséquent, utilisez la "méthode accesseur".
Premièrement, il existe trois types de méthodes d'accès.
attr_reader attr_reader est un getter pour accéder aux variables d'instance.
(Exemple)
class Animal
attr_reader :name
def initialize(name)
@name = name
end
end
animal = Animal.new("cat")
puts animal.name # => cat
De cette façon, vous pouvez accéder à la variable d'instance @name en écrivant attr_reader: name. Cependant, tel quel, le setter n'est pas défini, donc @name ne peut pas être changé depuis l'extérieur de la classe.
attr_writer attr_writer est un setter pour accéder aux variables d'instance.
(Exemple)
class Animal
attr_writer :name
attr_reader :name
def initialize(name)
@name = name
end
end
animal = Animal.new("cat")
puts animal.name
animal.name = "dog"
puts animal.name
# => cat
# dog
De cette façon, en écrivant attr_writer: name en plus de attr_reader: name, la variable d'instance @name peut être modifiée et accessible de l'extérieur.
attr_accessor Cette méthode combine les fonctions de attr_reader et attr_writter.
(Exemple)
class Animal
attr_accessor :name
def initialize(name)
@name = name
end
end
animal = Animal.new("cat")
puts animal.name
animal.name = "dog"
puts animal.name
# => cat
# dog
De cette manière, vous pouvez modifier la variable d'instance @name de l'extérieur et y accéder.
Recommended Posts