Coffeescript运行函数或读取变量

时间:2011-11-27 03:26:58

标签: coffeescript

说我有

msg = "Saved Successfully"

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

无论如何优雅地获取msg的值而不知道它是函数还是常规变量而不是

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

1 个答案:

答案 0 :(得分:37)

你可以使用CoffeeScript的简写:

f?()

相当于

f() if typeof f is 'function'

这意味着你可以写

success_message = msg?() ? msg

这是有效的,因为如果msg?()不是函数,undefined的值为msg

警告:如果msg()返回null,将success_message设置为msg函数,则会失败。

真的,如果您要在应用程序中执行此操作,则应编写实用程序函数:

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

如果你喜欢冒险,你甚至可以将toVal附加到Object原型。