Ruby Language Accesso alle variabili di istanza con getter e setter

Esempio

Abbiamo tre metodi:

  1. attr_reader : utilizzato per consentire la read della variabile al di fuori della classe.
  2. attr_writer : usato per consentire la modifica della variabile al di fuori della classe.
  3. attr_accessor : combina entrambi i metodi.
class Cat
  attr_reader :age # you can read the age but you can never change it
  attr_writer :name # you can change name but you are not allowed to read
  attr_accessor :breed # you can both change the breed and read it

  def initialize(name, breed)
    @name = name
    @breed = breed
    @age = 2 
  end
  def speak
    puts "I'm #{@name} and I am a #{@breed} cat"
  end
end
 
my_cat = Cat.new("Banjo", "birman")
# reading values:

my_cat.age  #=> 2
my_cat.breed #=> "birman"
my_cat.name #=> Error

# changing values
 
my_cat.age = 3 #=> Error
my_cat.breed = "sphynx" 
my_cat.name = "Bilbo"

my_cat.speak #=> I'm Bilbo and I am a sphynx cat

Si noti che i parametri sono simboli. questo funziona creando un metodo.

class Cat
  attr_accessor :breed
end

È fondamentalmente lo stesso di:

class Cat
  def breed
    @breed
  end
  def breed= value
    @breed = value
  end
end