开始前
其实这个东西并不是Spam Filter的核心,因为这样只是展示了一种简单的数据存储的方式。atom
这种方式是可以使用数据库来代替的,那些DSL会更加方便,在这里只不过跟着教程在跑了一遍基础。
Build A Record
(defrecord People [name cnt])
defrecord
宏可以用来定义一个记录,而 name、cnt 就是 People 的属性。
Store A Record
(def a (atom #{}))
(swap! a conj (People. "banana" 0))
atom
类型的 a 其实是一个可变的 hashset。意味着你可以对这个 hashset 进行操作。
Query A Record
(defn sq [ds key]
(first (filter #(= key (.name %)) ds)))
; (sq @a "banana")
找到 name == “banana” 这条记录。
Update A Record
(swap! a (partial replace
{(sq @a "banana")
(update-in (sq @a "banana") [:cnt] inc)}))
更新这条记录的方式。
写在最后但是很重很重要(Last But Not Least)
知乎有一句话说的好
先问是不是,再问为什么
网友评论