Me está costando entender attr_accessor
en Ruby. ¿Puede alguien explicarme esto?
attr_accessor es sólo un método. (El enlace debería proporcionar más información sobre cómo funciona - mira los pares de métodos generados, y un tutorial debería mostrarte cómo usarlo).
El truco es que class
no es una definición en Ruby (es "sólo una definición" en lenguajes como C++ y Java), sino que es una expresión que se evalúa. Es durante esta evaluación cuando se invoca el método attr_accessor
que a su vez modifica la clase actual - recuerda el receptor implícito: self.attr_accessor
, donde self
es el objeto de clase "abierto" en este punto.
La necesidad de attr_accessor
y sus amigos, es, bueno:
Ruby, al igual que Smalltalk, no permite acceder a las variables de instancia fuera de los métodos1 de ese objeto. Es decir, no se puede acceder a las variables de instancia en la forma x.y
como es común en, por ejemplo, Java o incluso Python. En Ruby y
se toma siempre como un mensaje a enviar (o "método a llamar"). Por lo tanto, los métodos attr_*
crean envoltorios que sustituyen el acceso a la instancia @variable
a través de métodos creados dinámicamente.
El boilerplate es una mierda
Espero que esto aclare algunos de los pequeños detalles. Feliz codificación.
1 Esto no es estrictamente cierto y hay algunas "técnicas" alrededor de esto, pero no hay soporte de sintaxis para el acceso a "variables de instancia pública".