Как правило: вам почти никогда не нужен троичный оператор в 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
, который, как указывает @Greg Campbell, в свою очередь эквивалентен завершающей if
форме модификатора
a.action if object.method
Кроме того, поскольку логические операторы в Ruby не только возвращают true
или false
, но и значение последнего оцененного выражения, их можно использовать для потока управления. Это идиома, импортированная из Perl, и будет выглядеть так:
object.method and a.action