欢迎!请参阅关于页面以获取更多关于这个工作方式的信息。
将meta应用于lazy-seq会导致其实现
(def x (vary-meta (lazy-seq (prn :realized)) assoc :foo :bar)) :realized
这一点可能有些令人惊讶,因此请修改lazy-seq的文档字符串来提及这一事实。
补丁
评论者:alexmiller
我认为这里调用seq()可能是因为旧的LazySeq实例和新的实例共享了序列。否则,带有meta的版本和未带有meta的版本将在相同的输入上执行相同的函数调用,但将是不连接的,这看起来很不好。
我真的不确定在哪里可以记录这个。也许在https://clojure.org/metadata页面上?
评论者:mpenet
是的,这也是在lazy-seq的文档string上。
我在元数据页面添加了一句话,并将描述更新得更适合这里的文档字符串更改。
评论者:michaelblume
在这个补丁中,with-meta 不会实现seq,但实现仍然只发生一次--这种做法是否可以接受?
添加了测试