请在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中,我对函数字面量的主体进行postwalk。由于在列表/序列(cons不是列表,但作为语法引号的结果而存在)中省略了行号,因此我需要实现自己的。

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

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

需要考虑的是,现有代码在walk期间是否修改了coll的元数据,这将因此破坏此更改。

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

更新在JIRA问题
...