They write accessor methods for instance variables, so you do not write simple getters and setters by hand. attr_reader :name defines a name method that returns @name, attr_writer :name defines a name= method that sets it, and attr_accessor :name defines both.
Pick the narrowest one. A value that callers should only read gets attr_reader, so the object stays in control of its own changes.
Inside the class, call a writer as self.name = value. Without self, Ruby creates a local variable instead.
class User
attr_reader :id
attr_accessor :name
def initialize(id, name)
@id = id
@name = name
end
end
user = User.new(1, "Ann")
user.name = "Bea" # writer from attr_accessor
user.name # "Bea"
user.id = 2 # NoMethodError: no id= writer
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.
Why there's no diagram: “”
The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓
The diagram below the answer is the concept . Jump to it ↓