欢迎!请参阅关于页面以获取更多关于此如何工作的信息。
将元数据应用于lazy-seq会导致实现
(def x (vary-meta (lazy-seq (prn :realized)) assoc :foo :bar)) :realized
这可能让人感到惊讶,因此修改lazy-seq的文档来说明此事。
补丁
评论由:alexmiller
我认为这里调用seq()的可能性很大,这样旧的LazySeq实例和新的LazySeq实例可以共享序列。否则,在元数据前后版本将执行相同的函数调用,但各自独立,这看起来不好。
我不太确定应该在何处进行文档记录。也许可以在https://clojure.org/metadata页面上记录?
评论由:mpenet
是的,这很有意义,并且在lazy-seq的文档字符串中也应该这样做。
我在元数据页面中增加了一句句子,并更新了描述,使其更适用于这里的文档字符串更改。
评论者:michaelblume
在这个补丁中,with-meta 不实现 seq,但实现仍然只发生一次 — 这是否是一种可接受的方法?
添加了测试