最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

虛假的“ if”塊中的賦值操作令人困惑

虛假的“ if”塊中的賦值操作令人困惑

慕尼黑5688855 2019-10-22 21:22:22
我在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]
查看完整描述

3 回答

?
慕無忌1623718

TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊

Ruby總是解析所有代碼。它不會將false視為不解析內(nèi)部內(nèi)容的標(biāo)志,它會對其進(jìn)行評估并發(fā)現(xiàn)不應(yīng)執(zhí)行內(nèi)部代碼


查看完整回答
反對 回復(fù) 2019-10-22
?
12345678_0001

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊

Ruby具有局部變量“提升”。如果在方法中的任何地方都對局部變量進(jìn)行了賦值,則該變量在方法中的任何地方都存在,甚至在賦值之前,甚至從未真正執(zhí)行過賦值。在分配變量之前,其值為nil。


編輯:


以上不是很正確。Ruby確實(shí)有一種變量提升的形式,即當(dāng)存在局部變量賦值但不執(zhí)行時(shí),它將定義一個(gè)局部變量。但是,在上述方法中發(fā)生賦值的點(diǎn)上找不到該變量。


查看完整回答
反對 回復(fù) 2019-10-22
  • 3 回答
  • 0 關(guān)注
  • 556 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號