在< 걸로 왔습?"

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

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


user=> (meta '^:foo [])
nil   ;; expected {:foo true} as in
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
_Comment made by: bronsa_

补丁后

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

0

评论者:stu

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

0

评论者:stu

乍一看,实现看起来不正确,因为它阻止了非 IObjjs 进入了 EmptyExpr。虽然所有持久集合都是 IObjjs,但不希望将此内置。

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

转到待定不完整的CLJ-1093,希望将其纳入1.6版。

0

评论人:alexmiller

从1.6版中移除,将在下一个版本中考虑。

0

评论人:alexmiller

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

0

评论者:bronsa

由于CLJ-1093应用的修复没有包含这一项,重新打开此问题

0

评论者:bronsa

刷新和压缩补丁

...