欢迎!请查看关于页面以获得更多关于该工作方式的详细信息。
一如既往,感谢 Clojure —— 我们爱它,并每天都在用它以令人满意的方式解决给我们程序员带来快乐和用户惊叹有价值的难题。
我天真地取集合差分,希望得到这个结果,很高兴。
> (clojure.set/difference #{:a :b :c} '(:a 1 2)) #{:c :b}
然后我这么做,很惊讶
> (clojure.set/difference #{:a :b :c} '(:a 1 2 3)) Execution error (IllegalArgumentException) contains? not supported on type: clojure.lang.PersistentList
然后我阅读了 clojure.set/difference 的实现,现在我明白了
https://github.com/clojure/clojure/blob/a29f9b/src/clj/clojure/set.clj#L49-62
但是,我很好奇如果这样就能做到,会更有趣。而且,鉴于这对我来说可能比对你更重要,我很好奇这里的实际权衡是什么。
请参阅 https://clojure.atlassian.net/browse/CLJ-2433(以及其中引用的各个问题单)。
这可能是应该在 https://clojure.org/guides/faq 上列出的事情,因为几乎每个新接触 clojure.set 的开发者都会问:clojure.set 函数仅在集合上定义 -- 文档字符串中没有说明如果你传递的不是集合会发生什么。
clojure.set