我希望能够将命名参数传递给哈希映射中的函数。假设我有这样的函数:
(defn foo [a & {:keys [b]}] (println a b))
我希望能够使用来自地图的参数来调用它。我知道我可以这样做:
(apply foo 1 (mapcat identity {:b 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))