让我们说我有一张简单的地图
(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 -c mymap)时我得到了
IllegalArgumentException Parameter declaration "mymap" should be a vector clojure.core/assert-valid-fdecl/fn--7207 (core.clj:7187)
感谢。 艾坦
答案 0 :(得分:3)
(defn get-c [{:keys [c]}] c)
你添加了太多[]
所以clojure试图破坏一个向量。
答案 1 :(得分:0)
(defn get-c [{c :c}] c)
这是Javadocs的一个很好的参考。
答案 2 :(得分:0)
在Clojure中破坏地图是一个非常方便和强大的功能。您可以破坏密钥,重命名密钥并为密钥提供默认值。
(defn destruct-test
[{:keys [name company]
:as zmap
:or {name "Default Name"
company "Default Company"}}]
[name company])