開始前
其實(shí)這個(gè)東西并不是Spam Filter的核心,因?yàn)檫@樣只是展示了一種簡(jiǎn)單的數(shù)據(jù)存儲(chǔ)的方式。atom 這種方式是可以使用數(shù)據(jù)庫(kù)來(lái)代替的,那些DSL會(huì)更加方便,在這里只不過(guò)跟著教程在跑了一遍基礎(chǔ)。
Build A Record
(defrecord People [name cnt])
defrecord 宏可以用來(lái)定義一個(gè)記錄,而 name、cnt 就是 People 的屬性。
Store A Record
(def a (atom #{}))
(swap! a conj (People. "banana" 0))
atom 類型的 a 其實(shí)是一個(gè)可變的 hashset。意味著你可以對(duì)這個(gè) hashset 進(jìn)行操作。
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)
知乎有一句話說(shuō)的好
先問是不是,再問為什么