| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/05/2011 20:06:46
|
adolfo_eloy
JavaChild
![[Avatar]](/images/avatar/cd48d72165d061eea4c7b63d8da8a64b.png)
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" |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/09/2011 11:40:36
|
ricardo.valeriano
Thread.start()
![[Avatar]](/images/avatar/19f59064291ed0341ae3765060cc4ad7.jpg)
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 |
|
|
 |
|
|
|
|