Подтвердить что ты не робот

Функция запуска Coffeescript или переменная чтения

Скажем, у меня есть

msg = "Saved Successfully"

или

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

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

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

Ответ 1

Там сокращенное название 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, если вы чувствуете себя авантюрно.