2011-11-27 25 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原型,如果你喜歡冒險的感覺..