使用哈希映射中的命名参数调用Clojure函数

时间:2014-03-30 10:27:52

标签: clojure

我希望能够将命名参数传递给哈希映射中的函数。假设我有这样的函数:

(defn foo [a & {:keys [b]}] (println a b))

我希望能够使用来自地图的参数来调用它。我知道我可以这样做:

(apply foo 1 (mapcat identity {:b 2}))

但肯定必须有一种更惯用,更少笨重的方法来做到这一点,对吗?

2 个答案:

答案 0 :(得分:1)

不,没有其他不那么笨重的方式。最好让你的foo将哈希映射作为参数和模式匹配来获取密钥:

(defn foo [a {:keys [b]}] (println a b))
(foo 1 {:b 2})

答案 1 :(得分:1)

不,没有。但您可以直接使用concat而不是mapcat

(apply foo 1 (apply concat {:b 2}))

您也可以使用->>宏来使其更清晰(尽管不会更短):

(->> {:b 2}
     (apply concat)
     (apply foo 1))