2012-08-28 62 views
3

我有一個重複的比較,我必須檢查三個變量是否等於某個變量。爲了簡單起見,我將創建一個說明我遇到的問題的場景。'幹我的Ruby語法

if time == -1 and day_of_week == -1 and month == -1 

我想知道是否有一個簡潔的,在邏輯上等價的方式來實現這個代碼行不重複。

現在,我用這樣的一種迂迴的方式如下:

all_equal = true 
[time_now, day_of_week, month].each { |value| all_equal = false if value != -1 } 
if all_equal .... 

哈,這顯然是相當過頂(並明確效率較低),但我覺得缺乏重複更悅目看着。

你會推薦更好的方法嗎?

謝謝!

+0

一邊,你的第二個版本是遜色,因爲它不允許短路評價。 – RoundTower

回答

6

使用Enumerable#all?

if [time_now, day_of_week, month].all? { |value| value == -1 } 
    # do something 
end 
被少可讀
+0

創建感謝。正在尋找一種較早的「全部」方法,但我想我已經看過這個了! – Vivek

+1

問題是,你可以使用很多方法來操作數組,也可以使用其他枚舉類型,所以我總是確保在Enumerable文檔中看起來很好看,以防萬一。該模塊在定義'#each'方法的任何類型上提供了很多很酷的功能。這真是太棒了! –

+0

令人驚訝的是,我一直在使用ruby這麼久,但並沒有真正花時間學習Enumerable等所有有趣的怪癖。再次感謝! – Vivek