欢迎!请点击关于页面获取更多相关信息。
感谢 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 的实现,现在我明白了。
clojure.set/difference
https://github.com/clojure/clojure/blob/a29f9b/src/clj/clojure/set.clj#L49-62
但是,我确实想知道如果这样工作会更有趣会怎样。而且既然对它来说,有趣可能是一个比对你更重要的标准,我想知道这里的实际权衡是什么。
contains?
请参阅https://clojure.atlassian.net/browse/CLJ-2433(及其引用的其他工单)。
这可能是应该出现在https://clojure.org/guides/faq的问题,因为它几乎每个初学clojure.set的开发者都会问:clojure.set中的函数仅在接受集作为参数时定义——文档字符串并未说明传递的不是集时会发生什么。