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