0
我正在玩class
塊中的本地,類變量和實例變量創建,如下所示。但是我發現了一些我未能解釋自己的事情。我的困惑已經發布在下面的兩個代碼之間。與類和實例變量創建混淆
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]
姆不錯的,那麼爲什麼它不與'p x.object_id'的情況? – 2013-03-03 09:25:49
局部變量只是對象的引用。他們堅持在他們宣佈的範圍內。由於沒有聲明局部變量,ruby甚至會嘗試將'x'作爲類「Foo」的方法處理(請參閱_「或**方法**'x'for Foo:Class」_在錯誤消息中?成功了,它會拋出一個錯誤。 – mudasobwa 2013-03-03 09:30:39