2012-04-26 6 views
34

So che c'è una scorciatoia a una riga if/else in Ruby:Esiste una stenografia se (senza altro) dichiarazione in Ruby on Rails?

a ? b : c 

C'è uno per un solo if dichiarazione? Invece di scrivere questo:

if a 
    # do something 
end 

Esiste una versione abbreviata di questo?

+1

Solo una piccola correzione nei termini: l'a? La sintassi b: c' è un * espressione *, non un * * * - valuta il valore singolo. –

+3

Nota che 'a? b: c' è chiamato [espressione ternaria] (http://en.wikipedia.org/wiki/%3F :). –

+1

@JasonLeBrun: praticamente qualsiasi cosa in Ruby è un'espressione (cioè restituisce un valore). –

risposta

71

È possibile utilizzare le condizioni post (non importa il nome, sarà valutata prima il codice. E verrà eseguito solo se do_something condizione restituisce il valore truthy (vale a dire non nil o false)).

do_something if a 
+0

effettivamente ho sbagliato - commento delete.d –

+6

Naturalmente, c'è anche la condizione inversa: 'do_qualcosa a meno che a'. –

+0

molto bello da usare con parentesi, ad es. 'function ('a', 'b', ('c' se qualcosa))' - il terzo argomento sarà 'c' o' nil' a seconda di 'qualcosa'. – Markus

5
do_something if a 

Questo sarà dapprima valutare la condizione if (in questo caso a) e se è true (o in caso di a, non false o nil) eseguirà do_something. Se è false (o nil) passerà alla riga successiva di codice mai in esecuzione do_something.