dúvida em uma definição de classe  XML
Índice dos Fóruns » Ruby & Ruby on Rails
Autor Mensagem
adolfo_eloy
JavaChild
[Avatar]

Membro desde: 26/02/2007 11:01:04
Mensagens: 110
Localização: São Paulo
Offline

Caros,

alguém pode me ajudar a enteder o código abaixo?
(desculpem se a pergunta for muito noob mas estou começando com ruby e não encontrei a resposta que procuro no google nem aqui no fórum )



O que significa o self na #LINHA 1? (Eu sei que é uma referência para uma instância de object. Pelo menos eu acho que sei =P )

Mas a questão é:
- self está sendo tratado como um atributo?
- algum tipo de retorno padrão?

Obrigado.

Adolfo Eloy

"Stay hungry, Stay foolish"
ricardo.valeriano
Thread.start()
[Avatar]

Membro desde: 28/07/2006 15:31:30
Mensagens: 37
Offline

adolfo_eloy, como vai?

Primeiro vamos lembrar que em Ruby, tudo é objeto, inclusive uma classe.

Retorna:


Para conseguir te explicar melhor, vou fazer uma pequena alteração no seu exemplo, acho que pode facilitar o entendimento, pode ser? Considere o seguinte:


O retorno desse código é algo assim:

O retorno acima nos diz que a classe de uma instância de teste é: #<Teste:0x10e0551e0> (um objeto - pois toda classe é um objeto, instância de Class). E o nome dessa classe é Teste.
A classe de self, na linha em que você está interessado é #<Class:#<Teste:0x10e0551e0>>, e o nome da classe dessa instância é: Class. Em outras palavras self é do tipo #<Class:#<Teste:0x10e0551e0>> que por sua vez é uma instância de Class.

Todo objeto em Ruby, quando instanciado, ganha uma classe só prá ele, é essa classe que está referenciada por self na linha em que você indicou. O código:

Serve para acessar - ou melhor dizendo: abrir - essa classe "oculta" que é pendurada em todo objeto instanciado em Ruby. Se você pode abrir essa classe, também pode adicionar métodos a ela. Quando fazemos uma chamada a um método em um objeto, o Ruby primeiro procura nessa classe oculta e depois procura em todo o caminho "natural", na árvore de herança daquele objeto.

Tem um post do Anderson Leite que explica esse processo, não sei se foi lendo ele que surgiu sua dúvida, deduzo que sim pelo termo eigenclass usado em seu exemplo. Além desse termo essa classe oculta também é conhecida como Singleton Class ou Ghost Class.
http://blog.caelum.com.br/metaprogramacao-eigenclass-em-ruby/.

Ajudou em algo? Vamos conversando porque o tema é divertido

http://twitter.com/sr_valeriano
http://backslashes.net
 
Índice dos Fóruns » Ruby & Ruby on Rails
Ir para:   
Powered by JForum 2.1.8 © JForum Team