2011-11-27 11 views
18

Decir que tengo ya seafunción de ejecución CoffeeScript o leer variables

msg = "Saved Successfully" 

o

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

¿Hay alguna forma de conseguir elegantemente el valor de msg sin saber si se trata de una función o una variable normal en lugar de haciendo

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

Respuesta

35

Hay una taquigrafía CoffeeScript usted puede tomar ventaja de:

f?() 

es equivalente a

f() if typeof f is 'function' 

lo que significa que se puede escribir

success_message = msg?() ? msg 

Esto funciona porque msg?() tiene el valor undefined si msg no es una función.

Advertencia: Esto se producirá un error si msg() vuelve null, el establecimiento de success_message a la función msg.

Realmente, si usted va a hacer esto en su aplicación, debe escribir una función de utilidad:

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

Incluso se puede adjuntar toVal al prototipo Object si te sientes aventurero ..

Cuestiones relacionadas