请在2024 Clojure状态调查!分享您的想法。

欢迎!请参阅关于页面以获得有关如何工作的更多信息。

0票< meta itemprop="upvoteCount" content="0">
文档

将元数据应用于lazy-seq会导致实现

(def x (vary-meta (lazy-seq (prn :realized)) assoc :foo :bar)) :realized

这可能有点令人惊讶,所以修改lazy-seq的docstring来提及这一点。

补丁

7个答案

0票< meta itemprop="upvoteCount" content="0">

评论由: alexmiller发表

我认为seq()在这里被调用来确保旧LazySeq实例和新实例共享序列。否则,预元数据和后元数据版本将在相同的输入上执行相同的函数调用,但它们将是断开的,这似乎很糟糕。

0票< meta itemprop="upvoteCount" content="0">

评论由: alexmiller发表

我不确定在哪里记录这一点。也许在https://clojure.org/metadata页面上?

0票< meta itemprop="upvoteCount" content="0">

评论由: mpenet发表

是的,这很有道理,而且在lazy-seq的docstring上也是这样的。

0票< meta itemprop="upvoteCount" content="0">

评论由: alexmiller发表

我在元数据页面添加了一句句子,并将描述更新为更适用于这里的文档字符串更改。

0票< meta itemprop="upvoteCount" content="0">

评论者:michaelblume

在这个补丁中,with-meta 不会识别 seq,但实现仍然只发生一次 -- 这是否是一个可接受的方法?

0票< meta itemprop="upvoteCount" content="0">

评论者:michaelblume

添加了测试

0票< meta itemprop="upvoteCount" content="0">
参考:https://clojure.atlassian.net/browse/CLJ-1800 (由 mpenet 报告)
...