ruby singleton classes

13 August 2009

Muita gente que estuda ruby on rails acaba achando estranho a notação class << object, que aparece em alguns lugares da api. Essa notação define as chamadas singleton classes em ruby. Por exemplo, uma classe normal em ruby poderia ser: Picture 1 Podemos instancia e invocar o método normalmente: Picture 2 Entretanto, também é possível definir métodos apenas para esse objeto "p", pois tudo em ruby, até mesmo as classes, são objetos, fazendo : Picture 3 O método "anda" é chamado de singleton method do objeto "p".
E onde estão os singleton methods ?
Um singleton method "vive" em uma singleton class. Todo objeto em ruby possui 2 classes:
  • a classe a qual foi instanciado
  • sua singleton class
A singleton class é exclusiva para guardar os metodos desse objeto, sem compartilhar com outras instâncias da mesma classe.
E como defino uma singleton class ?
Existe uma notação especial para definir uma singleton class: Picture 4 Definindo o código dessa forma temos o mesmo que no exemplo anterior, porém definindo o método anda explicitamente na singleton class. É possível ainda definir tudo na mesma classe: Picture 5 Mais uma vez o método foi definido apenas para um obejto, no caso , o objeto "Pessoa", podendo ser executado com: Picture 6 Clique aqui para ir a um post mais avançado sobre singleton classes.
comments powered by Disqus