¿Cómo funciona attr_accessor en Ruby on Rails ?

Posible duplicado:
¿Qué es attr_accessor en ruby?

Aquí está el código de ejemplo:

class User attr_accessor :name, :email def initialize(attributes = {}) @name = attributes[:name] @email = attributes[:email] end .... end 

Cuando lo hago

 example = User.new 

crea un usuario vacío y puedo asignar su nombre y correo electrónico a

 example.name = "something" example.email = "something" 

Mi pregunta es, ¿por qué esto funciona? ¿Cómo sabe la computadora que example.name significa la variable @name en la clase? Asumo que nombre y: nombre son diferentes, y aquí en el código no le hemos dicho explícitamente a la computadora que example.name es equivalente a: name symbol.

Lo que hace attr_accessor es que crea un par de métodos, un getter y un setter. Utiliza un símbolo que se pasa para construir nombres de métodos y variables de instancia. Mira, este código:

 class User attr_accessor :name end 

es equivalente a este código

 class User def name @name end def name=(val) @name = val end end 

attr_accessor :field es lo mismo que llamar attr_reader :field y attr_writer :field . Aquellos a su vez son aproximadamente iguales a:

 def field @field end def field=(value) @field = value end 

Bienvenido a la magia de la meta-progtwigción. 😉