欢迎!请查看关于页面,了解更多关于如何使用本网站的信息。
将元数据应用到一个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,但实现仍然只发生一次 — 这样的方法会被接受吗?
添加测试