2012-04-22 31 views
2

我目前在閱讀The Ruby Programming Language,我不確定如何正確閱讀Ruby-esque if else語句。你能幫我在第二個代碼塊中的常規if-else語句中寫下面的ruby代碼嗎?「Ruby-esque」if if else statements

if some_condition 
    return x 
else 
    return y 
end 

所以我不確定的紅寶石代碼是這些。

minimum = if x < y then x else y end 

max = x > y ? x : y 

謝謝!

+1

「你能不能幫我寫在普通的if-else語句類似如下這個?」 - 我不明白這個問題。 – 2012-04-22 23:31:34

+0

我改寫了這個問題。 :) – 2012-04-22 23:37:06

回答

5

這兩種形式似乎都有困難,利用了Ruby從函數式編程範例中得到的想法:即一切都是一個表達式,因此返回一個值。這是條件語句,即使如此,一個想法,像Java語言不真正支持(例如:

public boolean test() { 
    boolean x = if (1 > 2) { false; } else { true; }; 
    return x; 
} 

根本不是語法上有效)。

您可以在Ruby終端看到這一點:

will_be_assigned_nil = false if (1 > 2) # => nil 
will_be_assigned_nil # => nil 

所以,你的問題。 第一個可以寫成這樣:

if x < y 
    mininum = x 
else 
    minimum = y 
end 

二是像在其他語言中的三元運算符,並且等同於:

if x > y 
    max = x 
else 
    max = y 
end 

這有助於記住根&遺產的語言當試圖瞭解他們的構造。 Ruby與Perl分享了「不止一個方法去做」的哲學,而慣用的Ruby代碼通常高度重視優雅。

「後表達」風格的條件就是一個很好的例子。如果我有我的方法開始保護表達式,它並不少見,我寫:

raise "Pre-condition x not met" unless x # (or "if !x" , preference thing) 
raise "Pre-condition y not met" unless y # etc., etc. 

,而不是

if !x 
    raise "Pre-condition x not met" 
end 
if !y 
    raise "Pre-condition y not met" 
end 
+0

非常感謝! – 2012-04-22 23:47:14

+0

我給了你更多的背景,希望它有用:) – andrewdotnich 2012-04-22 23:49:34