clojure - 有没有办法编写一个 clojure 函数来解构地图并返回地图的任何部分?
问题描述
我想编写一个函数,它接受地图的特定结构并返回(打印出)我想要的地图的任何部分。这可能吗?
到目前为止我还没有成功。以下是我为打印地图的 a、b 和 c 部分而编写的函数,但我似乎在整个过程中遗漏了一些逻辑。
测试图是 {:nums {:test number?}}。我真正的目标是返回测试值,即数字?或者用户希望测试的任何值,例如符号?还是矢量?这就是我选择使用这种方法的原因。
我希望了解这就是为什么我选择返回地图的所有部分(即 a、b、c)的逻辑。
谢谢。
(defn des [mapp]
(let [[a [b c]] [mapp]]
(println (str a)))
)
=> #'user/des
(des {:nums {:test number?}})
{:nums {:test #object[clojure.core$number_QMARK_ 0x1089d00e "clojure.core$number_QMARK_@1089d00e"]}}
=> nil
(defn des [mapp]
(let [[a [b c]] [mapp]]
(println (str b)))
)
=> #'user/des
(des {:nums {:test number?}})
=> nil
(defn des [mapp]
(let [[a [b c]] [mapp]]
(println (str c)))
)
=> #'user/des
(des {:nums {:test number?}})
=> nil
解决方案
根据评论,手头的问题是:test
在 map 的 map 中找到 any 键。所以some
+vals
可以用来产生这样的结果:
user=> (some :test (vals {:nums {:test number?}}))
#<Fn@45297e7 clojure.core/number_QMARK_>
这是激进的,因为它假设:test
(作为函数)可以在每个映射值上调用(至少在找到结果之前)。
推荐阅读
- c++ - Boost::geometry::buffer 不适用于地理坐标系
- swiftui - SwiftUI:路径 .anchorPreference
- kubernetes - nginx-ingress 控制器不进行循环
- python - 如何编写 If else 条件以在两个函数之间进行选择
- android - Cordova 插件购买。批准的事件不会触发
- azure-devops - 在 Azure 管道上构建之前选择版本
- jquery - 创建整数数组并让函数检查每个值
- azure - Kubernetes 部署后外部 IP 无响应
- verilog - 如何在 Chisel 生成的模块中注入 Verilog 代码?
- excel - Application.Run 返回错误 438,不调用宏