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 .)`,而不是容易引起混淆(尽管可能性不大)的关键字的补丁?
我猜,这是一个低优先级的事情。
...