2011-11-27 27 views
18

说我有任何CoffeeScript的运行功能或读变量

msg = "Saved Successfully" 

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

反正是有典雅获得味精的值,而不知道它是否是一个函数或常规变量,而不是做

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

回答

35

有一个CoffeeScript速记你可以利用:

f?() 

相当于

f() if typeof f is 'function' 

,这意味着你可以写

success_message = msg?() ? msg 

这工作,因为msg?()undefined如果msg不是一个函数值。

警告:如果msg()回报null,设置success_messagemsg功能这将失败。

真的,如果你要做到这一点在你的应用程序,你应该写一个效用函数:

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

你甚至可以连接toValObject原型,如果你喜欢冒险的感觉..