以下功能可以做两件事 -
分离上述两个问题的更好模式是什么?
(def retrieved-data (atom nil))
(defn fetch-it!
[fetch-again?]
(if (or fetch-again?
(nil? @retrieved-data))
(->> (exec-services)
(map #(add-date-strings (:time %)))
(reset! retrieved-data))
@retrieved-data))
答案 0 :(得分:2)
一种可能的重构是:
(def retrieved-data (atom nil))
(defn fetch []
(->> (exec-services)
(map #(add-date-strings (:time %)))))
(defn fetch-it!
([]
(fetch-it! false))
([force]
(if (or force (nil? @retrieved-data))
(reset! retrieved-data (fetch))
@retrieved-data)))
顺便说一下,分离问题的模式被称为"功能" :)
答案 1 :(得分:2)
为了真正区分问题,我认为定义一个单独的提取和处理功能可能更好。所以他们决不会被收集。
(def retrieved-data (atom nil))
(defn fetcher []
(->> (exec-services)
(map #(add-date-strings (:time %)))))
(defn fetch-again? [force]
(fn [data] (or force (nil? data))))
(defn fetch-it! [fetch-fn data fetch-again?]
(when (fetch-again? @data))
(reset! data (fetch-fn))))
;;Usage
(fetch-it! fetcher retrieved-data (fetch-again? true))
请注意,我还将data atom作为参数。