请在2024 Clojure 问卷调查!中分享您的想法。

欢迎!请查阅关于页面以获取更多有关此工作方式的详细信息。

0
元数据
编辑

元数据的文档 https://clojure.org/reference/metadata 包含了一句话,我觉得它语法上不正确,有点混乱。

这句话是:由此产生的一个结果是,将元数据应用于延迟序列将实例化序列的头部,从而使这两个对象可以共享同一个序列。

请有人用正确的语法解释第三段第二句话的意义?

问题中所说的两个对象(都是)哪些以及这两个对象之间共享了哪个序列?

由于这句话模棱两可,我并不是100%确定它的意义。但这是我对这句话的修正尝试。请随意纠正我的错误修正。

话虽如此,元数据和它对一个对象A的关系是不变的 - 具有不同元数据的对象B是不同的对象。由此产生的一个结果是,如果A是一个延迟序列,那么将元数据应用于A将实例化序列的头部,使得对象A和B可以共享同一个元数据。

更多讨论可以在这里找到 https://clojurians.slack.com/archives/C03S1KBA2/p1625827141061700

1 答案

0

关于使用“序列”这个词,指代不同的事情存在混淆。一个小实验表明,它的意思为“……使得两个对象可以共享相同的尾部”

clj꞉user꞉> 
(def A (map inc (range)))
#'user/A
clj꞉user꞉> 
(def B (with-meta A {:foo "baz"}))
#'user/B
clj꞉user꞉> 
(identical? A B)
false
clj꞉user꞉> 
(identical? (rest A) (rest B))
true
我们如何在文档中解决这个问题?
Clojure 网站 issues/prs 应该在 https://github.com/clojure/clojure-site/issues 上提交
...