2

わかりましたので、この単純なクラスがあります

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 

最後のt.varステートメントが nil を返すのはなぜですか?@var = 99クラスの一番上にあるため、99 を返すと予想されます。たぶん、スコープの私の考えは100正しくありません...これに関するアイデアはありません

4

1 に答える 1

9

コード内のコメントを参照してください。

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
于 2012-09-08T18:19:07.837 に答える