2024 Clojure 状态调查 中分享您的想法!

欢迎!请点击关于页面获取更多相关信息。

+1
集合
编辑

感谢 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

但是,我确实想知道如果这样工作会更有趣会怎样。而且既然对它来说,有趣可能是一个比对你更重要的标准,我想知道这里的实际权衡是什么。

  • 是性能吗?
  • 还是,在关键时刻隐式转换为实现了 contains? 的东西会有什么缺点?

1 条回答

+1

被选中
 
最佳答案

请参阅https://clojure.atlassian.net/browse/CLJ-2433(及其引用的其他工单)。

这可能是应该出现在https://clojure.org/guides/faq的问题,因为它几乎每个初学clojure.set的开发者都会问:clojure.set中的函数仅在接受集作为参数时定义——文档字符串并未说明传递的不是集时会发生什么。

by
感谢链接—我学到了很多。我肯定会支持实现`clojure.set/difference`功能,使其接受一个序列作为第二个参数。在我的情况下,我找到了一个使用`(apply disj ...)的方便的替代方案。保持酷。
...