O que é attr_accessor em Ruby?
Estou tendo dificuldades para entender o attr_accessor
em Ruby. Alguém me pode explicar isto?
986
3
Estou tendo dificuldades para entender o attr_accessor
em Ruby. Alguém me pode explicar isto?
attr_accessor é justamente um método. (O link deve fornecer mais informações sobre como ele funciona - veja os pares de métodos gerados, e um tutorial deve mostrar como usá-lo).
O truque é que
class
não é definição em Ruby (é " apenas uma definição" em linguagens como C++ e Java), mas é uma expressão que avalia. É durante esta avaliação quando o métodoattr_accessor
é invocado, o que por sua vez modifica a classe atual - lembre-se do receptor implícito:self.attr_accessor
, ondeself
é o "open" objeto de classe neste ponto.A necessidade de
attr_accessor
e amigos, é, bem:Ruby, como Smalltalk, não permite que variáveis de instância sejam acessadas fora dos métodos1 para aquele objeto. Ou seja, variáveis de instância não podem ser acessadas na forma
x.y
como é comum, por exemplo, Java ou mesmo Python. Em Rubyy
é sempre tomado como uma mensagem para enviar (ou "método para chamar"). Assim, os métodosattr_*
criam wrappers que provêem o acesso à instância@variavel
através de métodos dinamicamente criados.A placa da caldeira é uma porcaria.
Espero que isto clarifique alguns dos pequenos detalhes. Feliz codificação.
1 Isto é't estritamente verdade e existem algumas "técnicas" em torno disto, mas não há suporte de sintaxe para "variável de instância pública" acesso.
O
attr_accessor
é muito simples:é um atalho para:
nada mais é do que um getter/setter para um objecto
Basicamente eles falsificam atributos de dados acessíveis ao público, que o Ruby não't tem.