4
某些未聲明的變量爲零,有些會拋出錯誤。怎麼來的?爲什麼未聲明的Ruby本地,實例,類和全局變量具有不同的行爲?
$ irb
1.9.3p0 :001 > asdf # local
NameError: undefined local variable or method `asdf' for main:Object
from (irb):1
from /Users/saizai/.rvm/rubies/ruby-1.9.3-p0/bin/irb:16:in `<main>'
1.9.3p0 :002 >@asdf # instance
=> nil
1.9.3p0 :003 >@@asdf # class
NameError: uninitialized class variable @@asdf in Object
from (irb):3
from /Users/saizai/.rvm/rubies/ruby-1.9.3-p0/bin/irb:16:in `<main>'
1.9.3p0 :004 > $asdf # global
=> nil
在紅寶石的另一個有趣的現象是,如果你設置一個未定義的局部變量自己,它變成零。 'foo = foo#=> nil'我想知道這是否與您在示例中展示的類似,只是語法不同。 – 2012-06-19 12:12:46
有趣。我認爲它完全一樣。解釋器看到賦值表達式,在它做任何事情之前,它可能會留出一些內存和默認值'nil'。然後它查看賦值的右側,並看到一個在ms前設置爲「nil」的變量,並賦予該值「foo」。所以,我猜在'foo = foo'中,變量被賦予了兩次'nil':一次當它出現時,再一次解釋右側。我愛Ruby的怪癖! =) – 2012-06-19 20:04:04