是否有一個紅寶石成語爲「如果做這個」,「做這個」就像一個簡單的命令?紅寶石三元運算符沒有其他
例如,我正在做
object.method ? a.action : nil
離開else子句空的,但是我覺得有可能這樣做的更地道的方式,不涉及在指定爲零結束。 (和或者,我覺得佔用了多行代碼會在這種情況下浪費。
是否有一個紅寶石成語爲「如果做這個」,「做這個」就像一個簡單的命令?紅寶石三元運算符沒有其他
例如,我正在做
object.method ? a.action : nil
離開else子句空的,但是我覺得有可能這樣做的更地道的方式,不涉及在指定爲零結束。 (和或者,我覺得佔用了多行代碼會在這種情況下浪費。
a.action if object.method?
Greg的回答是最好的,但備案,而且比用C甚至更多,表達式和語句是等價的在Ruby中,所以除了a.action if o.m?
你也可以做這樣的事情:
object.method? && a.action
你可以寫(a; b; c) if d
甚至
(a
b
c
) if d
或爲磨砂R:(x; y; z) ? (a; b c) : (d; e; f)
有Ruby中沒有情況下只有一個語句或表達被允許...
作爲一般規則:你很可能永遠不需要在Ruby中三元運算符。之所以你在C中需要它,是因爲在C if
是一個語句,所以如果你想返回一個值你有有使用三元運算符,這是一個表達式。
在Ruby中,一切是一個表達式,有是沒有報表,這使得三元操作幾乎是多餘的。您可以隨時更換
cond ? then_branch : else_branch
與
if cond then then_branch else else_branch end
所以,在你的榜樣:
object.method ? a.action : nil
相當於
if object.method then a.action end
其作爲@格雷格·坎貝爾指出的是反過來相當於尾隨的if
修飾形式
a.action if object.method
而且,由於在Ruby中的布爾運算符不只是返回true
或false
,但最後計算表達式的值,你可以用它們來控制數據流。這是在Perl進口一個習慣用法,是這樣的:
object.method and a.action
這是一個偉大的答案! – 2012-01-11 00:25:08
三元運算符'cond? a:b'短於'如果cond然後是另一個b end',那隻能讓我用它來保存11個字符;-) – Markus 2014-02-03 11:58:40
[Ruby Style Guide](https://github.com/bbatsov/ruby-style) -guide#ternary-operator)指出:「通過'if/then/else/end'構造三元運算符('?:'),這更爲常見,顯然更簡潔。 – 2016-04-18 09:13:51
result = (<expression> && <true value>) || <false value>
value = 1 result = (value == 1 && 'one') || 'two' result #=> 'one'
說明:值== 1 & & '一' #=>返回最後一個表達式的結果,值是平等1所以部分將被評估,並返回'一'。
value = 0 result = (value == 1 && 'one') || 'two' result #=> 'two'
解釋:值= 1,「和」表達不會被評估,但instad將被使用「或」表達和它返回「二」
的另一種方法可以做到這一點在同一行是:
if object.method; a.action end
這被認爲是不好的風格深受Rubocop,因爲它使用一個分號終止的表情,但我覺得它不是跟蹤末尾的if語句一些條件更具有可讀性。在最後忽略if語句更容易,如果條件不成立,我並不總是想要返回某些東西(因爲您被迫與三元運算符一起使用)。
也可以是一個更有點冗長和rubocop友好:
if object.method then a.action end
這取決於上下文,但有時它更優雅讀的,如果/當/在身體比只有一個行開始塊更密集/更簡潔的東西。 – 2010-02-01 16:29:12