[英]Destructing a map (using the let keyword)
据我了解, 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
我认为可以按以下两种顺序定义地图:
user=> (def map1 {:a 1})
#'user/map1
user=> (def map2 {1 :a})
#'user/map2
没有。
map1
有一个元素; 使用键:a
和值1
。
map2
有一个元素; 使用键1
和值:a
。
这是不一样的。
如果您不想重复自己的话,可以使用以下语法来破坏地图中的一个或多个条目:
(let [{:keys [name profession]} person] (str "The person's name is " name ", and job is " profession))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.