亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

對于Ruby中的塊,執行。對比花括號

對于Ruby中的塊,執行。對比花括號

慕妹3242003 2019-09-19 15:12:07
我有一個同事正在積極地試圖說服我不要使用do..end而是使用花括號來定義Ruby中的多行塊。我堅定地只使用花括號作為短單線,并且做其他事情。但我想我會聯系更大的社區來獲得一些解決方案。那是哪個,為什么?(一些應該代碼的示例)context do  setup { do_some_setup() }  should "do somthing" do    # some more code...  endend要么context {  setup { do_some_setup() }  should("do somthing") {    # some more code...  }}就個人而言,只看上面的問題就可以解答我的問題,但我想向更大的社區開放。
查看完整描述

3 回答

?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

一般約定是將do..end用于單行塊和大括號的花括號,但是這兩個例子之間也有區別,可以用這個例子說明:


puts [1,2,3].map{ |k| k+1 }

2

3

4

=> nil

puts [1,2,3].map do |k| k+1; end

#<Enumerator:0x0000010a06d140>

=> nil

這意味著{}具有比do..end更高的優先級,因此在決定要使用的內容時請記住這一點。


PS:在開發偏好時要記住的另一個例子。


以下代碼:


task :rake => pre_rake_task do

  something

end

真正意思:


task(:rake => pre_rake_task){ something }

這段代碼:


task :rake => pre_rake_task {

  something

}

真正意思:


task :rake => (pre_rake_task { something })

因此,要獲得您想要的實際定義,使用花括號,您必須執行以下操作:


task(:rake => pre_rake_task) {

  something

}

也許使用大括號作為參數是你想要做的事情,但如果你不這樣做,最好在這些情況下使用do..end來避免這種混亂。


查看完整回答
反對 回復 2019-09-19
?
慕村9548890

TA貢獻1884條經驗 獲得超4個贊

來自編程Ruby:


大括號具有很高的優先級; 確實有一個低優先級。如果方法調用具有未括在括號中的參數,則塊的大括號形式將綁定到最后一個參數,而不是整個調用。do表單將綁定到調用。


所以代碼


f param {do_something()}

param在代碼中將塊綁定到變量


f param do do_something() end

將塊綁定到函數f。


但是,如果將函數參數括在括號中,則這不是問題。


查看完整回答
反對 回復 2019-09-19
?
慕無忌1623718

TA貢獻1744條經驗 獲得超4個贊

我投票支持do / end

該慣例適用do .. end于多線和{ ... }單線。


但是我喜歡do .. end更好,所以當我有一個襯墊時,do .. end無論如何都會使用它,但是像往常一樣將它格式化為三行中的do / end。這讓每個人都開心。


  10.times do 

    puts ...

  end

一個問題{ }是它是詩歌模式 - 敵對(因為它們緊緊地綁定到最后一個參數,而不是整個方法調用,所以你必須包括方法parens),在我看來,它們看起來并不那么好看。它們不是語句組,它們與哈希常量沖突以便于閱讀。


另外,我已經{ }在C程序中看到了足夠的內容。像往常一樣,Ruby的方式更好。只有一種類型的if塊,您永遠不必返回并將語句轉換為復合語句。


查看完整回答
反對 回復 2019-09-19
  • 3 回答
  • 0 關注
  • 762 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號