下面是一個與您的問題沒有直接關係的快速提示:在Ruby中,沒有像if
這樣的語句。事實上,在Ruby中,沒有任何聲明在所有。 全部是一個表達式。 if
表達式返回在分支中執行的最後一個表達式的值。
所以,沒有必要寫
if condition
foo(something)
else
foo(something_else)
end
這將更好地寫成
foo(
if condition
something
else
something_else
end
)
或者作爲一個班輪
foo(if condition then something else something_else end)
在您的例子:
something.meth(if val == 'hi' then 'hello' else 'right' end)
注意:Ruby也有一個三元運算符(condition ? then_branch : else_branch
),但這是完全不必要的,應該避免。 C語言需要三元運算符的唯一原因是因爲在C if
中是一條語句,因此無法返回值。您需要三元運算符,因爲它是一個表達式,並且是從條件返回值的唯一方法。但在Ruby中,if
已經是一個表達式,所以實際上不需要三元運算符。
在Ruby中,'if'是表達式,而不是語句。事實上,* everything *是一個表達式,沒有語句。因此,你的兩個例子最好寫成'puts if val == 1 then'1'else'Not 1'end'。 – 2010-06-21 11:31:36
@Jorg - 沒錯。我需要花費一些時間來清理C年。 :) – Gishu 2010-06-21 12:20:49
在ruby 2.1.2中,'puts if(1 == 1)then'1'else'not 1'end'會產生一個'語法錯誤,意外的關鍵字_然後,期待輸入結束',除非你把if括號中的語句'puts(if(1 == 1)then'1'else'not 1'end)'。 – Sam 2015-10-12 14:22:37