欢迎!请参阅 关于 页面,了解更多此功能的信息。
将元数据应用于 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,但实现仍然只发生一次--这会不会是可接受的方案?
添加了测试。