Eine Methode, die den Wert einer Instanzvariablen liest und schreibt. Ruby ist so konzipiert, dass auf Instanzvariablen nicht so zugegriffen werden kann, wie sie sind.
(Beispiel)
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)
Gemäß dieser Codedefinitionsmethode wird @name als eine andere Variable namens "Klasseninstanzvariable" definiert, auf die von der Instanz aus nicht zugegriffen werden kann.
Wie soll ich die Instanzvariablen definieren, auf die von der Instanz aus zugegriffen werden kann?
Verwenden Sie daher die "Accessor-Methode".
Erstens gibt es drei Arten von Zugriffsmethoden.
attr_reader attr_reader ist ein Getter für den Zugriff auf Instanzvariablen.
(Beispiel)
class Animal
attr_reader :name
def initialize(name)
@name = name
end
end
animal = Animal.new("cat")
puts animal.name # => cat
Auf diese Weise können Sie auf die Instanzvariable @name zugreifen, indem Sie attr_reader: name schreiben. Der Setter ist jedoch nicht definiert, sodass @name nicht von außerhalb der Klasse geändert werden kann.
attr_writer attr_writer ist ein Setter für den Zugriff auf Instanzvariablen.
(Beispiel)
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
Auf diese Weise kann durch Schreiben von attr_writer: name zusätzlich zu attr_reader: name die Instanzvariable @name geändert und von außen aufgerufen werden.
attr_accessor Diese Methode kombiniert die Funktionen von attr_reader und attr_writter.
(Beispiel)
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
Auf diese Weise können Sie die Instanzvariable @name von außen ändern und darauf zugreifen.
Recommended Posts