2013-03-08 16 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"]