2016-07-21 59 views
1

我正在使用TDD(測試驅動開發)學習Ruby。在Rspec代碼,我經常看到:不使用dot從另一個方法調用的方法的Ruby名稱

it "return the sum of two different arugments" do 
     calc = Calculator.new 
     expect(calc.add(1,2)).to eq(3) 
end 

通常情況下,在其他語言,最後的命令往往會被寫爲eq (expect(calc(1,2)), 3)expect(calc.add(1,2)).eq(3)

但在此示例中,沒有任何關聯第一個短語expect(calc.add(1,2))和第二個短語eq(3)

所以在Ruby中,這個語法的名字是什麼?

+1

這就是所謂的*詩歌模式* – DigitalRoss

+0

@DigitalRoss哇感謝'詩mode'。 –

+2

是的,@sawa應該更新他的答案,注意它被稱爲*詩歌模式。*它用於DSL代碼很多。你不能在詩歌模式中直接進行方法鏈接,所以我爲了好玩而做的事情就是這樣的:而不是,比如說'IO.readlines(f).map {whatever}'我改寫'(IO.readlines f) .map {whatever}'。如果你這樣做,你的團隊成員可能會抱怨你的風格。 – DigitalRoss

回答

2

簡而言之,參數周圍的一對括號可以省略。

expect(calc.add(1, 2)).to eq(3) 

是語法糖形式:

expect(calc.add(1, 2)).to(eq(3)) 

即,eq(3)是方法to的論點。

根據@DigitalRoss,它似乎被稱爲詩歌模式

+0

是否省略了括號內的糖,還是不需要它們的包含(除非需要消除歧義)? –

1

紅寶石青睞簡潔和快捷方式,也被稱爲糖。其中之一是省略括號。

您也可以省略其他的parens(除需要它們的expect以外),例如,你也可以這樣做:

expect(calc.add 1,2).to eq 1 

,而不是更長

expect(calc.add(1, 2)).to(eq(3)) 
+0

邁克爾,我不明白@ sawa早期的解決方案(除了'eq 1'和'eq(1)',這是個小問題)。 –

相關問題