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
