我希望能夠通過哈希映射將命名參數傳遞給函數。假設我有這樣的功能:使用哈希映射中的命名參數調用Clojure函數
(defn foo [a & {:keys [b]}] (println a b))
我希望能夠使用來自地圖的參數調用它。我知道我可以這樣做:
(apply foo 1 (mapcat identity {:b 2}))
但一定有一個更習慣和不笨笨的方式來做到這一點,對嗎?
我希望能夠通過哈希映射將命名參數傳遞給函數。假設我有這樣的功能:使用哈希映射中的命名參數調用Clojure函數
(defn foo [a & {:keys [b]}] (println a b))
我希望能夠使用來自地圖的參數調用它。我知道我可以這樣做:
(apply foo 1 (mapcat identity {:b 2}))
但一定有一個更習慣和不笨笨的方式來做到這一點,對嗎?
沒有,沒有。但是你可以通過mapcat
使用concat
,而不是直接做的:
(apply foo 1 (apply concat {:b 2}))
您也可以使用->>
宏這樣可以很清楚(雖然不是短):
(->> {:b 2}
(apply concat)
(apply foo 1))
不,沒有其他更笨拙的方法。這將是更好地使你的foo
採取散列映射爲參數和模式匹配於它的鍵:
(defn foo [a {:keys [b]}] (println a b))
(foo 1 {:b 2})
'(富1:B 2) '比'(foo 1 {:b 2})'更習慣於使用,至少從我讀過的Clojure代碼來看。 –
我喜歡應用'concat',謝謝。使用線程操作符實際上使其不太清楚,至少對我而言。 :) –