Coffeescript запустить функцию или прочитать переменную - PullRequest
20 голосов
/ 27 ноября 2011

Скажем, у меня есть либо

msg = "Saved Successfully"

, либо

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

В любом случае, можно ли элегантно получить значение msg, не зная, является ли это функцией или обычной переменной, вместо того, чтобы делать

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

1 Ответ

37 голосов
/ 27 ноября 2011

Есть сокращение CoffeeScript, которым вы можете воспользоваться:

f?()

эквивалентно

f() if typeof f is 'function'

, что означает, что вы можете написать

success_message = msg?() ? msg

Thisработает, потому что msg?() имеет значение undefined, если msg не является функцией.

Предупреждение: Это не удастся, если msg() вернет null, установив success_message к функции msg.

Действительно, если вы собираетесь делать это в своем приложении, вы должны написать служебную функцию:

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

Вы можете даже прикрепить toVal к Object прототипу, если вы чувствуете себя предприимчивым ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...