Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 将映射分解为函数输入_Clojure_Pattern Matching_Destructuring - Fatal编程技术网

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])