3 回答

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊
根據(jù)“Pickaxe”一書(shū)(我在這里看第2版),戈登是正確的:唯一的區(qū)別是優(yōu)先權(quán):
p.356(我的斜體):
大括號(hào)具有很高的優(yōu)先級(jí);
do
優(yōu)先級(jí)低。如果方法調(diào)用具有未括在括號(hào)中的參數(shù),則塊的大括號(hào)形式將綁定到最后一個(gè)參數(shù),而不是整個(gè)調(diào)用。該do
形式將綁定到調(diào)用。
有關(guān)示例,另請(qǐng)參見(jiàn)第168頁(yè)。

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊
這兩種形式是等價(jià)的。
建議的樣式是使用一個(gè)行塊的大括號(hào),并對(duì)多行塊使用“do” - “end”。
編輯: Austin Ziegler指出(在下面的評(píng)論中)這兩種形式具有不同的優(yōu)先級(jí):卷曲括號(hào)具有更高的優(yōu)先級(jí)。因此,當(dāng)調(diào)用沒(méi)有括號(hào)的方法時(shí),{}中包含的塊將綁定到最后一個(gè)參數(shù)而不是調(diào)用方法。
以下示例由Austin建議:
def foo yieldendputs foo { "hello" }puts foo do "hello"end
第一個(gè)“puts”打印“hello”:foo被稱為返回“hello”,這是puts的參數(shù)。
第二個(gè)保釋錯(cuò)誤:
in `foo': no block given
因?yàn)樵谶@種情況下,do-end塊綁定到puts方法。
再次感謝Austin清理這個(gè)問(wèn)題。
- 3 回答
- 0 關(guān)注
- 682 瀏覽
添加回答
舉報(bào)