我喜歡明智地使用三元條件運算符。在我看來,它非常簡潔。ruby idiom:謂詞和條件運算符
然而,在Ruby中,我發現我經常測試斷言方法,這已經有了自己的問號:
some_method(x.predicate? ? foo : bar)
我被這兩個問題震動標誌着如此接近對方。是否有一個等效的緊湊和可讀的替代方案?
我喜歡明智地使用三元條件運算符。在我看來,它非常簡潔。ruby idiom:謂詞和條件運算符
然而,在Ruby中,我發現我經常測試斷言方法,這已經有了自己的問號:
some_method(x.predicate? ? foo : bar)
我被這兩個問題震動標誌着如此接近對方。是否有一個等效的緊湊和可讀的替代方案?
最近的簡潔表達,你可以得到的是
x.predicate? && foo || bar
作用不大不小的三元運算符的,但更多的神祕和醜陋。
這只是造成對query?
方法的語法糖糖尿病的情況。我想我們必須學會忍受它。
爲什麼需要在C條件運算符的原因,是因爲條件語句,以及,一個聲明,即它不會(也不能)返回一個值。所以,如果你想從條件代碼中返回一個值,那你的運氣不好。這就是爲什麼必須添加條件運算符的原因:它是一個表達式,即它返回一個值。
在Ruby中,但是,因爲沒有報表中的Ruby反正有條件的經營者完全是多餘的。 全部是一個表達式。具體來說,Ruby中沒有if
語句,只有if
表達式。
而且由於if
是一種表達,無論如何,你可以用它代替了神祕的條件運算符:
some_method(if x.predicate? then foo else bar end)
你要記住的唯一的事情是,謂詞需要通過任何一個換行符結束,分號或then
。所以,你做第一個三次,你會變成
if cond
foo
else
bar
end
到
if cond foo else bar end
,不知爲什麼它不工作。但在那之後,該then
(或分號)自然會到來:
if cond; foo else bar end
if cond then foo else bar end
我upvoted,但真的嗎?神祕?我不認爲任何程序員會發現條件運算符是神祕的,而且我個人更希望在方法調用中看到「如果條件結束」。 – 2010-07-12 20:01:57
+1代表'then' /';'對話務員的評論和討論。 – pilcrow 2010-07-13 14:16:00
+1,因爲我認爲這比「謂詞?」更具可讀性。實施 – 2011-07-27 21:24:42
只要刪除空間。
some_method(x.predicate?? foo : bar)
在Ruby中同樣有效。嘗試一下!
+1我不喜歡它 - 看起來太像錯字的線 - 但它是一個可行的選擇。 (有趣的是,如果你通過後空翻來定義一個方法'predicate?'[原文如此,Ruby仍然會將上述內容解析爲調用'謂詞?'。) – pilcrow 2012-05-16 13:33:48
不能說這是比較容易的,但在許多情況下,它可能是有用的來包裝自己謂詞放在括號中,類似這樣的:
some_method((x.predicate?) ? foo : bar)
有幫助,尤其是當你的謂詞並不象method?
那樣簡單
+ 1爲隱晦++和醜++。 – pilcrow 2010-07-13 14:17:55
+1,因爲這對Ruby來說更自然。你的三元運算符是一種可以說更加神祕的創新,而使用&&和||反對錶達式是合乎邏輯的,因爲我們知道Ruby表達式總是返回值,因此代碼就是它的意思。 – exiquio 2013-04-29 01:23:06