Это скорее обсуждение, чем вопрос.Я пытался найти самый простой и самый чистый способ запоминания возврата из функции с использованием CoffeeScript.Происходящий из мира Ruby, это то, что часто делается как:
def some_func
@_some_func ||= begin
do_something
do_another_thing
returned_value
end
end
Мне нравится, насколько это просто и ясно.Поэтому я пытался воспроизвести нечто подобное в CoffeeScript.
Я посмотрел на то, что другие люди предложили на SO здесь и здесь , но я не сделалЯ полностью следовал их предложениям и поэтому искал что-то более ясное.
Мое решение состояло в том, чтобы создать функцию cache
, которая выглядит следующим образом:
cache = (func) ->
id = String(func).hash()
window[id] ?= func()
Эта функция принимает любую функцию,хеширует его, чтобы получить уникальный идентификатор, а затем сохраняет результат в глобальном window
объекте, используя этот идентификатор.В следующий раз, когда вызывается функция, объект окна проверяется с использованием идентификатора, и если результат существует, он возвращается без повторного вызова функции.
Вот как это будет выглядеть на практике:
my_amazing_func = ->
cache ->
do_something
do_another_thing
returned_value
Я очень доволен этим решением.Это ясно, очевидно и прекрасно работает.
Я хотел бы услышать мысли, идеи, предложения и т. Д., Чтобы улучшить это.Спасибо!