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@bnil
変数@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