我在if塊內(nèi)進(jìn)行賦值操作,發(fā)現(xiàn)了以下結(jié)果,這令我感到驚訝:C:\>irb --simple-promptif falsex = 10end#=> nilp xnilx.object_id#=> 4#=> nilp yNameError: undefined local variable or method `y' for main:Object from (irb):5 from C:/Ruby193/bin/irb:12:in `<main>'在上面的代碼中,您可以看到x即使僅在falsy if塊中將其分配給了局部變量,該局部變量仍已創(chuàng)建。我想看到的內(nèi)容x與p x這迫使我相信,分配卻沒有這樣做,而是x變量存在。x.object_id也證明是這種情況。現(xiàn)在我的問題是,x即使if有意永久關(guān)閉塊入口點(diǎn),也如何創(chuàng)建該局部變量?我期望的輸出p x類似于的輸出p y。但是相反,我得到了一個(gè)令人驚訝的答案p x。有人可以向我解釋這個(gè)概念如何運(yùn)作嗎?編輯不,這是另一個(gè)測試。僅local變量不是這種情況。instance和class變量也發(fā)生了同樣的情況。見下面:class Foo def show @X = 10 if false p @X,"hi",@X.object_id endend#=> nilFoo.new.shownil"hi"4#=> [nil, "hi", 4]class Foo def self.show @@X = 10 if false p @@X,"hi",@@X.object_id endend#=> nilFoo.shownil"hi"4#=> [nil, "hi", 4]成功案例:class Foo def self.show @@X = 10 if true p @@X,"hi",@@X.object_id endend#=> nilFoo.show10"hi"4#=> [10, "hi", 4]
虛假的“ if”塊中的賦值操作令人困惑
慕尼黑5688855
2019-10-22 21:22:22