A Spam Filter(Part 1)

开始前

其实这个东西并不是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)

  • 《提问的智慧》
  • 熟读文档可以让你成为一个智慧的人

知乎有一句话说的好

先问是不是,再问为什么

你可能感兴趣的:(A Spam Filter(Part 1))