2013-03-08 17 views
2

我遇到下面的解構中環處理函數 -解構Clojure中 - 嵌入式地圖

[{{:keys [params remote]} :params :as request}]

它的奇怪,因爲這是我第一次看到了牙套的兩個層次。 clojure是否支持n級解構?我在上面假設:params地圖正在被解構成[params remote]?

+1

[Binding Forms(Destructuring)](http://clojure.org/special_forms#Special%20Forms--Binding%20Forms%20%28Destructuring%29) – 2013-03-08 03:59:16

回答

5

是的,Clojure支持解構嵌套數據結構,儘管我不知道它是否支持任意深度嵌套。下面是解構的地圖,其中兩個鍵中的一個具有矢量其相應價值的一個簡單的例子:

(let [{[x y] :pos c :color} 
     {:color "blue" :pos [1 2]}] 
    [x y c]) 

你舉的例子不止於此,雖然,因爲它也使用了:keys指令,結合本地變量與地圖的鍵名稱相同。以下是等效的:

(let [{{:keys [params remotes]} :params} 
     {:params {:params "PARAMS" :remotes "REMOTES"}}] 
    [remotes params]) 

(let [{{params :params remotes :remotes} :params} 
     {:params {:params "PARAMS" :remotes "REMOTES"}}] 
    [remotes params]) 

兩者都評估爲["REMOTES" "PARAMS"]