Clojure 将映射分解为函数输入
假设我有一张简单的地图Clojure 将映射分解为函数输入,clojure,pattern-matching,destructuring,Clojure,Pattern Matching,Destructuring,假设我有一张简单的地图 (def mymap {:a 1 :b 2 :c 3 :d 4}) 现在我想写一个名为get-c的函数。此函数将获取mymap作为输入。既然我只对c感兴趣,那么在输入阶段有没有办法只得到c?我尝试了很多变化,但总是出错。e、 g (defn get-c [[{:keys [c]} input-map]] c) 它确实可以编译,但当我尝试(get-cmymap)时,我得到了 谢谢。 艾坦 您添加了太多的[],因此clojure试图破坏一个向量 (defn get-c
(def mymap {:a 1 :b 2 :c 3 :d 4})
现在我想写一个名为get-c的函数。此函数将获取mymap作为输入。既然我只对c感兴趣,那么在输入阶段有没有办法只得到c?我尝试了很多变化,但总是出错。e、 g
(defn get-c [[{:keys [c]} input-map]] c)
它确实可以编译,但当我尝试(get-cmymap)时,我得到了
谢谢。
艾坦
您添加了太多的[]
,因此clojure试图破坏一个向量
(defn get-c [{c :c}] c)
这是一个很好的参考。在Clojure中销毁地图是一个非常方便和强大的功能。您可以销毁键、重命名键,还可以为键提供默认值
(defn destruct-test
[{:keys [name company]
:as zmap
:or {name "Default Name"
company "Default Company"}}]
[name company])
错误消息不可能来自您粘贴的代码。例如,如果您编写了
(defn get-c(mymap))
,您会得到这样的错误,并且在计算defn
时得到它,而不是在调用get-c
时得到它。请包括您实际运行的代码。
(defn get-c [{c :c}] c)
(defn destruct-test
[{:keys [name company]
:as zmap
:or {name "Default Name"
company "Default Company"}}]
[name company])