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 .)` 而非容易引起混淆的关键词的补丁会受欢迎吗?尽管这不常见。
虽然这是个低优先级的事。
...