clojure.set/union 对输入类型非常敏感。它不会尝试检查或修正输入类型,不会引发错误,甚至不会对此行为进行文档记录。
如果所有输入都是集合,则它可以正常工作。
`
ti.repl-init=> (clojure.set/union #{1 2 3} #{1 2 3 4})
{1 4 3 2}
`
如果参数都是向量或序列,则返回相同类型的表示,并包含重复项。
ti.repl-init=> (clojure.set/union [1 2 3] [1 2 3]) [1 2 3 1 2 3] ti.repl-init=> (clojure.set/union (list 1 2 3) (list 1 2 3)) (3 2 1 1 2 3)
如果参数是混合的,只有当最长的输入参数是集合时,才会返回正确的结果。
`
ti.repl-init=> (clojure.set/union #{1 2 3} [2 3])
{1 3 2}
ti.repl-init=> (clojure.set/union [1 2 3] #{2 3})
[1 2 3 3 2]
ti.repl-init=> (clojure.set/union [2 3] #{1 2 3})
{1 3 2}
ti.repl-init=> (clojure.set/union #{2 3} [1 2 3])
[1 2 3 3 2]
`