/ / Por que eu não consigo acessar a variável de instância em ruby? - rubi sobre trilhos, rubi

Por que não consigo acessar a variável de instância em ruby? - rubi sobre trilhos, rubi

Ok, então eu tenho essa classe simples

class Test
@var = 99

def initialize(var2)
@var2 = var2
end

attr_reader :var, :var2
end

> t = Test.new(100)
=> #<Test:0x007f9b8118ac30 @var2=100>
> t.var2
=> 100
> t.var
=> nil

Por que é o último t.var declaração retornando nil com eu espero que ele retorne 99 por causa do @var = 99 no topo da classe. Talvez a minha ideia de escopo não seja 100 correta ... alguma idéia sobre essa

Respostas:

9 para resposta № 1

Veja os comentários no código.

class Test
@var = 99 # self is Test class at this point. You"re defining
# an instance variable on a class instance.

def initialize(var2)
@var2 = var2 # This is normal instance variable.
end

attr_reader :var, :var2
end

t = Test.new(100)
t.var # => nil
t.var2 # => 100

# don"t bother with creating an accessor and get the ivar from Test directly.
Test.instance_variable_get(:@var) # => 99