2017-04-01 24 views
1

这是Reagent project的片段。看看complete-allclear-done,我的理解是要换出修改后的地图。我不明白它是如何完成的。 mmap的定义要求3个参数 - 并且complete-all似乎用两个来调用它,即map#(assoc-in % [1 :done] v)clear-done调用remove#(get-in % [1 :done])。我尝试使用repl来进行实验,但无法获得requires怎么交换!和mmap函数在这里工作?

(ns todomvc.core 
     (:require [reagent.core :as r])) 

    (defonce todos (r/atom (sorted-map))) 

    (defonce counter (r/atom 0)) 

    (defn add-todo [text] 
     (let [id (swap! counter inc)] 
     (swap! todos assoc id {:id id :title text :done false}))) 

    (defn toggle [id] (swap! todos update-in [id :done] not)) 
    (defn save [id title] (swap! todos assoc-in [id :title] title)) 
    (defn delete [id] (swap! todos dissoc id)) 

    (defn mmap [m f a] (->> m (f a) (into (empty m)))) 
    (defn complete-all [v] (swap! todos mmap map #(assoc-in % [1 :done] v))) 
    (defn clear-done [] (swap! todos mmap remove #(get-in % [1 :done]))) 

回答

0

RTFM。现有映射作为函数的第一个参数传递。当一切都失败...

+0

我认为这是一个有效的问题,并没有必要粗鲁(即使对自己!)。你能更清楚地解释答案吗? –

相关问题