Вот краткий совет, который не имеет прямого отношения к вашему вопросу: в 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
уже является выражением, поэтому в действительности нет необходимости в троичном операторе.