一如既往地感谢 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? 的东西会有什么负面影响?