問題:
有時候,我們會想要表達一種語意 (semantic)
if (c) {
hm[x] = y
}
這種語意在 Clojure 會略顯得冗長
(if c
(assoc hm :x y)
hm)
但是,其實可以這樣子表達
(cond-> hm
c (assoc :x y))
問題:
有時候,我們會想要表達一種語意 (semantic)
if (c) {
hm[x] = y
}
這種語意在 Clojure 會略顯得冗長
(if c
(assoc hm :x y)
hm)
但是,其實可以這樣子表達
(cond-> hm
c (assoc :x y))
問題:
我們需要對一個 Clojure HashMap hm 裡的某個 path 做操作,插入 val 值。需要滿足的條件為:
我本來是比較喜歡 (2) ,多想了一陣子之後,又覺得 (1) 似乎更好一些些。
使用 (1) 的表示法還有一個理由: 假設,你現在是要從一堆已經 serialized data 裡,一個又一個的 item 去讀取,最後會建出這顆樹。很有可能,你會想寫 recursive function 。
而在 Clojure 裡,想到 recursive function ,要想到兩種改善效能的方式:
(1) recur
(2) lazy-seq
其中,lazy-seq 的話,需要跟 cons 一起搭配使用,所以 (1) 的表示法相對有彈性。