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

欢迎!请参阅关于页面以了解工作原理的更多信息。

0
Clojure

我注意到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))

这是否是为了性能而有意做出的权衡,或者这是需要额外思考以更好地处理的情况?

1 答案

+1

所以……别这么做?

这些应根据文档字符串来执行...这就是为什么我会提问的原因。
是否欢迎一个将标记符更改为`(Object .)`而不是易引起混淆的关键字的补丁?
我想,这是一件低优先级的事情。
...