Oi,

On 6/5/06, Faztar Jilvor <[EMAIL PROTECTED]> wrote:
Ola a todos, (novamente)

Eu nao estou entendendo porque quando

  class X
    @@foo = "alguma coisa"

    def bla
      @@X.foo
    end
  end

  class Y < X
    @@foo = "outra coisa"
  end

o valor de X.new.bla e' "outra coisa" e nao "alguma coisa". Porque o
namespace de X foi invadido com @@foo de Y? Qual e' a maneira correta
de obter-se o comportamento que eu quero?

Isso é um assunto recorrente. Quando comecei em Ruby, vindo de Java,
eu usei algumas variáveis de classe também, mas depois percebi que elas
eram totalmente redundantes em Ruby, e que quando eu quisesse algo
com apenas uma instância, podia usar módulo para isso. Exemplo:

module Foo
 
  @bar = "alguma coisa"
  def Foo.bar
    @bar
  end

  def Foo.bar= v
    @bar = v
  end

end


Então, é assim que eu faço em Ruby, usando uma combinação
de módulos e objetos para quase tudo.

Em Ruby, a variável de classe e objeto é sobrescrita nas instâncias
de herança. Isso não foi problema para mim até hoje, e eu já escrevi
umas 50 mil linhas ou mais de Ruby, embora eu tenha deletado um
monte dessas linhas porque é muito difícil manter tanta coisa. Hoje em
dia tenho um pouco mais de 30 mil linhas de Ruby que eu tento manter,
e tenho umas 300 classes (re)declaradas e uns 140 módulos (re)declarados.

Redeclarado porque em Ruby as classes e módulos são abertos, então é
possível particionar o código em vários arquivos, redeclarando o módulo ou a
classe.


Sds,
Joao
_______________________________________________
Ruby-l mailing list
[email protected]
http://www.listas.unicamp.br/mailman/listinfo/ruby-l

Responder a