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

欢迎!请查看关于页面以获取更多关于此功能的信息。

0
集合

subvec返回的向量即使原始向量有元数据也不包含元数据。

示例

(meta (subvec 
       (with-meta [0 1 2 3 4 5] {:foo 42})
       0))
;; nil

预期值

 {:foo 42}

实时演示此处

1 答案

0

经过一些思考,我认为这是预期行为。通常,当在集合上进行“更新”操作(assoc、dissoc、conj、disj)时,会保留元数据。在这种情况下,subvec在概念上正在创建一个新集合,它是旧集合的子集(select-keys可能属于这一类别)。因为它是一个新集合,所以我们不会期望它从原始集合中复制元数据。

那么当subvec收到`0`并返回整个向量时的特殊情况是什么?

同样,select-keys也会保留元数据。
...