2014-03-30 36 views
0

我希望能够通过哈希映射将命名参数传递给函数。假设我有这样的功能:使用哈希映射中的命名参数调用Clojure函数

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

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

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

但一定有一个更习惯和不笨笨的方式来做到这一点,对吗?

回答

1

没有,没有。但是你可以通过mapcat使用concat,而不是直接做的:

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

您也可以使用->>宏这样可以很清楚(虽然不是短):

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

我喜欢应用'concat',谢谢。使用线程操作符实际上使其不太清楚,至少对我而言。 :) –

1

不,没有其他更笨拙的方法。这将是更好地使你的foo采取散列映射为参数和模式匹配于它的键:

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

'(富1:B 2) '比'(foo 1 {:b 2})'更习惯于使用,至少从我读过的Clojure代码来看。 –