Esto es más de un comentario de una respuesta, pero la distinción entre variables locales y métodos es vital si está utilizando un método de asignación.
class TrafficLight
attr_accessor :color
def progress_color
case color
when :orange
#Don't do this!
color = :red
when :green
#Do this instead!
self.color = :orange
else
raise NotImplementedError, "What should be done if color is already :red? Check with the domain expert, and build a unit test"
end
end
end
traffic_light = TrafficLight.new
traffic_light.color = :green
traffic_light.progress_color
traffic_light.color # Now orange
traffic_light.progress_color
traffic_light.color # Still orange
Por qué alguien debería hacer esto ?! –
@Henrik: Quiero saber mejor el rubí –
Esto mismo (entre muchas otras cosas buenas) se menciona en un libro llamado "Ruby In A Nutshell" por Yukihiro Matsumoto (el creador de Ruby); publicado por O'Reilly). El libro es excelente para responder exactamente el tipo de profundidad de la pregunta que usted hizo. – Zabba