【发布时间】:2020-04-05 05:24:48
【问题描述】:
在这里完成 Clojure 新手。这是一个简单的问题,但我似乎无法理解:
鉴于我有一个未知深度的嵌套 hasmap,我如何使用 Spectre 的 transform() 来改变数据结构的值?我想这里需要一个递归路径,但我无法让它工作。一个可行的例子是我所追求的,不幸的是,文档中没有。
(在递归映射中有一个 example 用于 set-val,但我不知道如何将其转换为转换用例)
编辑:要求提供更多详细信息,因此它们是: 我对可以改变嵌套映射的所有值的转换形式感兴趣 - 任何深度)。例如,此转换将能够递增以下映射(以及任何其他嵌套映射)中的所有值:
{:a 1 :b {:c 2 :d {:e 3}}}
AND
{:a 1 :b {:c 2}}
AND
{:a 1}
我感兴趣的代码行可能看起来像这样:
(transform <missing selector here> inc data)
【问题讨论】:
-
即使你没有让它工作,你的代码也会帮助我们了解你想要做什么并从那里开始工作。
-
@cfrick 我添加了更多细节。我认为这对于任何了解幽灵的人来说都应该足够清楚。没有太多代码可以展示——这在 clojure 中很典型
-
最简单的是
(transform (walker number?) inc {:a 1 :b {:c 2 :d {:e 3}}})。它可能过于笼统,但它仍然解决了嵌套映射(以及任何嵌套结构)的情况