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 .)`而不是易于在此处产生混淆的关键字呢?
我猜,这是一个低优先级的事情。
...