我注意到 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))
这是否是为了性能而做出的权衡,还是可能需要额外的思考来更好地处理?