clojure2024状态调查中分享你的想法!

欢迎!请查看关于页面,了解更多如何使用本站的信息。

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 .)`,而不是易混淆的敏感关键字(尽管不太可能)?
我认为这是一个低优先级的事项。
...