欢迎!请查阅关于页面以获取更多有关此工作方式的详细信息。
元数据的文档 https://clojure.org/reference/metadata 包含了一句话,我觉得它语法上不正确,有点混乱。
这句话是:由此产生的一个结果是,将元数据应用于延迟序列将实例化序列的头部,从而使这两个对象可以共享同一个序列。
请有人用正确的语法解释第三段第二句话的意义?
问题中所说的两个对象(都是)哪些以及这两个对象之间共享了哪个序列?
由于这句话模棱两可,我并不是100%确定它的意义。但这是我对这句话的修正尝试。请随意纠正我的错误修正。
话虽如此,元数据和它对一个对象A的关系是不变的 - 具有不同元数据的对象B是不同的对象。由此产生的一个结果是,如果A是一个延迟序列,那么将元数据应用于A将实例化序列的头部,使得对象A和B可以共享同一个元数据。
更多讨论可以在这里找到 https://clojurians.slack.com/archives/C03S1KBA2/p1625827141061700
关于使用“序列”这个词,指代不同的事情存在混淆。一个小实验表明,它的意思为“……使得两个对象可以共享相同的尾部”
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