2011-11-27 11 views
18

Dire che ho siafunzione run CoffeeScript o leggere variabile

msg = "Saved Successfully" 

o

msg = -> "Saved #{@course.title} Successfully" 

C'è comunque di eleganza ottenere il valore di msg senza sapere se si tratta di una funzione o una variabile regolare, piuttosto che

success_message = if typeof msg is 'function' then msg() else msg 

risposta

35

C'è una stenografia di CoffeeScript che è possibile sfruttare:

f?() 

è equivalente a

f() if typeof f is 'function' 

il che significa che è possibile scrivere

success_message = msg?() ? msg 

Questo funziona perché msg?() ha il valore undefined se msg non è una funzione.

Caveat: Questo avrà esito negativo se msg() rendimenti null, impostando success_message alla funzione msg.

Davvero, se avete intenzione di fare questo nella vostra applicazione, si dovrebbe scrivere una funzione di utilità:

toVal = (x) -> if typeof x is 'function' then x() else x 
successMessage = toVal msg 

si potrebbe anche collegare toVal al prototipo Object se vi sentite avventurosi ..

Problemi correlati