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

欢迎!请参阅关于页面以获取有关此操作的更多信息。

+1
集合
已关闭
空集合上的元数据丢失


user=> (meta '^:foo [])
nil   ;; 预期{:foo true},就像在
user=> (meta '^:foo [1])
{:foo true}


此错误传播到^:const变量

user=> (def ^:const foo ^:foo [])
#'user/foo
user=> (meta foo)
nil
user=> (meta @#'foo)
{:foo true}


*原因:* 如同CLJ-1093,空集合被替换成了丢失元数据的EmptyExpr

*建议:* 如果存在元数据,则不要用EmptyExpr替换。

*补丁:* 0001-Support-retrieval-of-metadata-from-quoted-empty-lite.patch

*审核:**
已关闭,备注:已发布

19 答案

0
 
最佳答案

1.10.2-alpha3释出修复

0
_评论:bronsa_

补丁后

user=> (meta '^:foo [])
{:foo true}
user=> (meta '^:foo [:a])
{:foo true}
user=> (def ^:const foo ^:foo [])
#'user/foo
user=> (meta foo)
{:foo true}

0

评论由:stu发布

我认为标题应该是“Clojure在空字面量上丢失引用元数据”。

0

评论由:stu发布

乍一看,该实现似乎有误,因为它阻止了non-IObjs到达EmptyExpr。可能所有持久化集合都是IObjs,但不想将此内建。

0

评论由:bronsa发布

你说得对,我已经更新了我的补丁,它现在应该按照预期工作

0

评论由:jafingerhut发布

Nicola:你2013年3月29日更新的补丁001-CLJ-1187.patch在我尝试编译时出现了语法错误。

0

评论由:bronsa发布

哦,讽刺啊,我在写java时搞错了括号。

对此表示歉意,下面是正确的补丁,它应该适用于upstream/master。

0

评论由:cldwalker发布

看起来不错

0

评论由:bronsa发布

CLJ-1093包含一个修复此问题的补丁,应该优先使用

0

评论者:alexmiller

由于有关 CLJ-1093 的说明,将其标记为未审核。在通过 Rich 之前想评估这个问题。

0

评论者:alexmiller

切换到待定 Incomplete pending CLJ-1093,希望将其纳入 1.6 版。

0

评论者:alexmiller

从 1.6 版拔出,将在下次发布中考虑。

0

评论者:alexmiller

重复 CLJ-1093,应Nicola的要求关闭。

0

评论由:bronsa发布

由于针对 CLJ-1093 应用修补的内容并未包括这个问题,因此重新打开。

0

评论由:bronsa发布

刷新并合并补丁

...