2015-07-21 56 views
0

據我所知,let關鍵字在本地將變量綁定到值(支持某種模式匹配)。它收到兩個參數。首先是帶有我們想要綁定的符號和我們想要綁定的值的向量。然後出現一個使用該值的表達式。破壞地圖(使用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

可能重複(http://stackoverflow.com/questions/31220308/clojure-shortcuts-for-destructuring-maps) – schaueho

+0

'map1'和'map2'遠不相同:在'map1'中,鍵是':a',而在後者中,關鍵是'1'。否則你的問題看起來像一個重複的https://stackoverflow.com/questions/31220308/clojure-shortcuts-for-destructuring-maps – schaueho

回答

1

我認爲地圖可以以任一次序來定義:

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

map1具有一個元件;使用密鑰:a和值1
map2有一個元素;使用密鑰1和值:a

這是不一樣的。

1
  1. 在地圖中,輸入值的順序非常重要;第一個人是關鍵,第二個是價值。
  2. ,如果你不喜歡重複自己,你可以使用下面的語法在地圖中解構一個或多個條目:中[Clojure的快捷方式解構圖]

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