Coffeescript运行函数或读取变量

nic*_*ode 20 coffeescript

说我有

msg = "Saved Successfully"
Run Code Online (Sandbox Code Playgroud)

要么

msg = -> "Saved #{@course.title} Successfully"
Run Code Online (Sandbox Code Playgroud)

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

success_message = if typeof msg is 'function' then msg() else msg
Run Code Online (Sandbox Code Playgroud)

Tre*_*ham 37

你可以利用CoffeeScript的简写:

f?()
Run Code Online (Sandbox Code Playgroud)

相当于

f() if typeof f is 'function'
Run Code Online (Sandbox Code Playgroud)

这意味着你可以写

success_message = msg?() ? msg
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为如果不是函数,则msg?()具有值.undefinedmsg

警告:如果msg()返回null,设置success_message为该msg功能将失败.

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

toVal = (x) -> if typeof x is 'function' then x() else x
successMessage = toVal msg
Run Code Online (Sandbox Code Playgroud)

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