设置多个arity的联合

时间:2014-01-24 23:00:12

标签: clojure

在编写一个以多个集合作为输入的函数时,我希望能够输出它们的集合。到目前为止,我已经写下了这个功能:

    (defn foo [x y]
    (clojure.set/union x y))

但是也尝试了一些

    (defn foo 
    ([x y]  (clojure.set/union x y))
    ([x y & args] (clojure.set/union x y args)))

输出不匹配的时髦结果

   (clojure.set/union #{1 2 3} #{2 3 4} #{4 5 6})

显然,我在尝试构建foo时,缺少set函数的一些简单实现,这是一个多元arity函数。

1 个答案:

答案 0 :(得分:2)

你的问题是args是一个包含你在前两个之后传递的所有集合的Seq,但是union函数希望它的参数是set。

你想要的是apply功能:

(defn foo 
  ([x y]  (clojure.set/union x y))
  ([x y & args] (apply clojure.set/union x y args)))