Як загальне правило: вам майже ніколи не потрібен тернарний оператор у 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