我希望能够通过哈希映射将命名参数传递给函数。假设我有这样的功能:使用哈希映射中的命名参数调用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',谢谢。使用线程操作符实际上使其不太清楚,至少对我而言。 :) –