Использование памятки в CoffeeScript - PullRequest
0 голосов
/ 02 мая 2019

Это скорее обсуждение, чем вопрос.Я пытался найти самый простой и самый чистый способ запоминания возврата из функции с использованием 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

Я очень доволен этим решением.Это ясно, очевидно и прекрасно работает.

Я хотел бы услышать мысли, идеи, предложения и т. Д., Чтобы улучшить это.Спасибо!

...