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

欢迎!请参阅关于页面以获取更多关于这个工作方式的信息。

0
文档

将meta应用于lazy-seq会导致其实现

(def x (vary-meta (lazy-seq (prn :realized)) assoc :foo :bar)) :realized

这一点可能有些令人惊讶,因此请修改lazy-seq的文档字符串来提及这一事实。

补丁

7 个答案

0

评论者:alexmiller

我认为这里调用seq()可能是因为旧的LazySeq实例和新的实例共享了序列。否则,带有meta的版本和未带有meta的版本将在相同的输入上执行相同的函数调用,但将是不连接的,这看起来很不好。

0

评论者:alexmiller

我真的不确定在哪里可以记录这个。也许在https://clojure.org/metadata页面上?

0

评论者:mpenet

是的,这也是在lazy-seq的文档string上。

0

评论者:alexmiller

我在元数据页面添加了一句话,并将描述更新得更适合这里的文档字符串更改。

0

评论者:michaelblume

在这个补丁中,with-meta 不会实现seq,但实现仍然只发生一次--这种做法是否可以接受?

0

评论者:michaelblume

添加了测试

0
参考:[链接到CLJ-1800](https://clojure.atlassian.net/browse/CLJ-1800)(由mpenet报告)
...