破坏地图(使用let关键字)

时间:2015-07-21 07:32:33

标签: dictionary clojure destructor

据我了解,let关键字本地将变量绑定到值(支持某种模式匹配)。它收到两个参数。首先是一个带有我们想要绑定的符号和我们想要绑定的值的向量。然后是一个使用该值的表达式。

在此示例中,首先定义变量person

user=> (def person {:name "Jabba" :profession "Gangster"})
#'user/person

现在假设我们想使用let函数破坏地图:

user=> (let [{name :name} person] (str "The person's name is " name))
"The person's name is Jabba"

为什么[{name :name} person]:name必须出现在变量name之后?这实际上不会起作用:

user=> (let [{:name name} person] (str "The person's name is " name))
"The person's name is "

为什么订单是这样的?我认为地图可以按任何顺序定义:

user=> (def map1 {:a 1})
#'user/map1
user=> (def map2 {1 :a})
#'user/map2

2 个答案:

答案 0 :(得分:1)

  

我认为地图可以按任意顺序定义:

user=> (def map1 {:a 1})
#'user/map1
user=> (def map2 {1 :a})
#'user/map2

没有。

map1有一个元素;使用键:a和值1 map2有一个元素;使用密钥1和值:a

不一样。

答案 1 :(得分:1)

  1. 在地图中,输入值的排序非常重要;第一个人是关键,第二个是价值。
  2. 如果您不想重复自己,可以使用以下语法来解构地图中的一个或多个条目:

    (let [{:keys [name profession]} person] (str "The person's name is " name ", and job is " profession))