class
以下のように、ブロック内のローカル、クラス変数、およびインスタンス変数の作成をいじっていました。しかし、私は自分で説明できなかった何かを見つけました。私の混乱は、以下の 2 つのコードの間に投稿されています。
class Foo
def self.show
@@X = 10 if true
p "hi",@@X.object_id,x.object_id
end
end
#=> nil
Foo.show
#NameError: undefined local variable or method `x' for Foo:Class
# from (irb):4:in `show'
# from (irb):7
# from C:/Ruby193/bin/irb:12:in `<main>'
上記のエラーが予想されます。しかし、以下のコードでは、クラス変数@@X
を に割り当てています10
。しかし、p
ステートメントではインスタンス変数を使用@X
しました。上記のコードのようにエラーが発生しなかったのはなぜですか?
class Foo
def self.show
@@X = 10 if true
p "hi",@X.object_id
end
end
#=> nil
Foo.show
"hi"
4
#=> ["hi", 4]