class Something
@b = [4432]
def screen
puts @b.class
end
end
s = Something.new
s.screen
「Nilclass」を出力します。クラス内で定義されたインスタンス変数が常に NilClass の一部になるのはなぜですか?
class Something
@b = [4432]
def screen
puts @b.class
end
end
s = Something.new
s.screen
「Nilclass」を出力します。クラス内で定義されたインスタンス変数が常に NilClass の一部になるのはなぜですか?
インスタンス変数はオブジェクト (別名インスタンス) に属しているため、インスタンス変数と呼ばれます。すべてのインスタンスには、独自のインスタンス変数があります。
Something
あなたの場合、 (のインスタンスであるClass
)とs
(のインスタンスである)の2つのオブジェクトがありますSomething
。これら 2 つのオブジェクトには、それぞれ独自のインスタンス変数のセットがあります。には、を指すSomething
というインスタンス変数があります。には代入しないため名前付きのインスタンス変数がなく、初期化されていないインスタンス変数は に評価されます。@b
[4432]
s
@b
nil
変数@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