请在2024 Clojure 状况调查中分享您的想法!

欢迎!请查看关于页面了解更多关于这是如何工作的信息。

+40
Clojure
关闭

示例

user=> (set! *print-meta* true)
true
user=> (clojure.walk/postwalk identity ^:foo ())
()
user=> (clojure.walk/postwalk identity (with-meta (list 1 2 3) {:foo true}))
(1 2 3)

查看JIRA问题:https://clojure.atlassian.net/browse/CLJ-2568
该JIRA问题已经存在了一段时间。创建此询问问题是为了让它能够获得社区的赞同票。如果您关心,请给它投票!

重申: 在 1.12.0-alpha8 中发布

2 个回答

+1

看到有关真正有需要例子的示例会非常有帮助 —— 当我们考虑各种权衡时,没有更多关于你在哪里遇到这种情况的信息,就很难理解使用案例。

一个例子是在鹰嘴豆(edamame)中,我遍历了函数字面量的主体。因为在列表/序列中删除了行号(cons序列不是列表,但它是语法引号的结果)所以需要实现自己的版本。

https://github.com/borkdude/edamame/blob/6ec811bee0d9a636e4e1eb87f9cf2aa1dd5d8518/src/edamame/impl/read_fn.cljc#L4-L24
我认为所有使用clojure.walk进行代码处理的严肃代码都受到元数据问题的困扰。它丢失了^:tag、位置等信息。
0

Alex Miller
2020年5月31日 晚上9:54

需要考虑的是现有代码在遍历时是否修改了coll的元数据,这可能会导致此更改出问题。

这是一个问题,有没有答案呢?

已更新到JIRA问题
...