欢迎!请访问关于页面获取更多关于如何工作的信息。
将元数据应用于lazy-seq会导致立即求值
(def x (vary-meta (lazy-seq (prn :realized)) assoc :foo :bar)) :realized
这可能令人惊讶,因此请修改lazy-seq的文档字符串以提及这一点。
补丁
评论者:alexmiller
我认为这里可能调用了seq(),这样旧LazySeq实例和新实例将共享序列。否则,预处理元数据和后处理元数据版本将在相同的输入上执行相同的功能调用,但会相互独立,这似乎很糟糕。
我真的不确定在哪里可以记录这件事情。也许在https://clojure.org/metadata页面?
评论者:mpenet
是的,这样解释是合理的,并在lazy-seq的文档字符串中也有提及。
我在元数据页面中添加了一句话,并更新了描述以使其更适合这里的文档字符串更改。
评论者:michaelblume
在这个补丁中,with-meta不实现seq,但实现仍然只发生一次 — 这种方法可以接受吗?
添加了测试