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

欢迎!请访问关于页面以了解更多此网站如何运作的信息。

+40
borkdude 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
alexmiller

看到实际例子将非常有帮助——我们研究了各种权衡,没有更多关于您遇到此问题的地方的信息,就难以理解用例。

borkdude
一个例子是在大豆豆(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 PM

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

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

在JIRA问题中更新
...