Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 如何在以下fn中分离关注点_Clojure - Fatal编程技术网

Clojure 如何在以下fn中分离关注点

Clojure 如何在以下fn中分离关注点,clojure,Clojure,下面的函数做两件事- 检查atom是否为nil或fetch agin是否为true,然后获取数据 它通过调用(添加日期字符串)来处理数据 区分上述两个问题的更好模式是什么 (def retrieved-data (atom nil)) (defn fetch-it! [fetch-again?] (if (or fetch-again? (nil? @retrieved-data)) (->> (exec-services)

下面的函数做两件事-

  • 检查atom是否为nil或fetch agin是否为true,然后获取数据
  • 它通过调用(添加日期字符串)来处理数据
区分上述两个问题的更好模式是什么

(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))

一种可能的重构是:

(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)))

顺便说一下,分离关注点的模式称为“函数”:)

一种可能的重构是:

(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)))

顺便说一下,分离关注点的模式称为“函数”:)

要真正分离关注点,我认为最好定义一个单独的获取和处理函数。因此,它们绝不是完整的

(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))

注意,我还将数据原子作为参数

要真正分离关注点,我认为最好定义一个单独的fetch和process函数。因此,它们绝不是完整的

(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))
注意,我还将数据原子作为参数