5
class Something
  @b = [4432]
  def screen
    puts @b.class
  end
end
s = Something.new
s.screen

「Nilclass」を出力します。クラス内で定義されたインスタンス変数が常に NilClass の一部になるのはなぜですか?

4

6 に答える 6

11

インスタンス変数はオブジェクト (別名インスタンス) に属しているため、インスタンス変数と呼ばれます。すべてのインスタンスには、独自のインスタンス変数があります。

Somethingあなたの場合、 (のインスタンスであるClass)とs(のインスタンスである)の2つのオブジェクトがありますSomething。これら 2 つのオブジェクトには、それぞれ独自のインスタンス変数のセットがあります。には、を指すSomethingというインスタンス変数があります。には代入しないため名前付きのインスタンス変数がなく、初期化されていないインスタンス変数は に評価されます。@b[4432]s@bnil

于 2013-10-09T10:32:24.687 に答える
1

変数@bが存在しないためです。たとえば、次の例では、表示されるのと同じ結果が生成されます。

class Something
  @b = [4432]
  def screen
    puts @a.class  #=> note @a which is non-existent
  end
end
s = Something.new
s.screen

一方

class Something
  @b = [4432]
  def screen
    puts @a.class
  end
  def self.screen
    puts @b.class
  end
end
s = Something.new

s.screen #=> NilClass    
Something.screen #=> Array
于 2013-10-09T10:26:50.403 に答える