我注意到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))
这是否是为了性能而有意做出的权衡,或者这是需要思考以更好地处理的地方?