我发现dedupe
和返回transducer的partition-by
使用魔数值:clojure.core/none
来表示处理的开始。在某些情况下,这会导致结果不正确
;;;; dedupe
(dedupe
[:clojure.core/none 1 2 3])
;;=> (1 2 3)
;; expected: (:clojure.core/none 1 2 3)
(dedupe
[:clojure.core/none :clojure.core/none 1 2 3])
;;=> (1 2 3)
;; expected: (:clojure.core/none 1 2 3)
;; transducing arity is also affected
(sequence
(dedupe)
[:clojure.core/none 1 2 3])
;;=> (1 2 3)
;; expected: (:clojure.core/none 1 2 3)
;;;; partition-by
(sequence (partition-by
{0 0
1 :clojure.core/none
2 2})
(range 3))
;;=> ([0] [1 2])
;; expected: ([0] [1] [2])
;; non-trasducing arity works OK:
(partition-by
{0 0
1 :clojure.core/none
2 2}
(range 3))
;;=> ((0) (1) (2))
这是否是性能方面的有意权衡,或者这是需要考虑更好处理方式的问题?