据我了解,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
答案 0 :(得分:1)
我认为地图可以按任意顺序定义:
user=> (def map1 {:a 1})
#'user/map1
user=> (def map2 {1 :a})
#'user/map2
没有。
map1
有一个元素;使用键:a
和值1
map2
有一个元素;使用密钥1
和值:a
。
不一样。
答案 1 :(得分:1)
如果您不想重复自己,可以使用以下语法来解构地图中的一个或多个条目:
(let [{:keys [name profession]} person] (str "The person's name is " name ", and job is " profession))