ruby singleton classes

Posted on August 13, 2009

5


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.

Posted in: oo, rails, ruby