0

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]
4

1 に答える 1

2

Ruby ではすべてがオブジェクトであり、明示的な変数宣言が必要ないため、コーディングします。

p @X.object_id

インスタンス変数@X( @X.nil? == true) を暗黙的に導入します。この魔法は次の場所で見ることができますirb:

~ irb
> p @x.object_id
# 8
# ⇒ 8
于 2013-03-03T09:22:15.000 に答える