Come regola generale: è praticamente mai bisogno l'operatore ternario in Ruby. Il motivo per cui è necessario in C, è perché in C if
è un'istruzione, quindi se si desidera restituire un valore, è possibile utilizzare per l'operatore ternario, che è un'espressione.
In Ruby, tutto è espressione, ci sono nessuna dichiarazione, il che rende l'operatore ternario praticamente superfluo. È sempre possibile sostituire
cond ? then_branch : else_branch
con
if cond then then_branch else else_branch end
Quindi, nel tuo esempio:
object.method ? a.action : nil
è equivalente a
if object.method then a.action end
che, come sottolinea @ Greg Campbell è a sua volta equivalente al trailing if
modificatore forma
a.action if object.method
Inoltre, dal momento che gli operatori booleani in Ruby non solo restituiscono true
o false
, ma il valore dell'ultima espressione valutata, si possono usare per il flusso di controllo. Questo è un idioma importato da Perl, e sarebbe simile a questa:
object.method and a.action
fonte
2010-02-01 08:17:28
Dipende dal contesto, ma a volte è più elegante per leggere un if/while/iniziano blocco con una sola linea nel corpo di qualcosa di più denso/terso. –