我在环处理程序函数中遇到了以下解构 -
[{{:keys [params remote]} :params :as request}]
奇怪的是,这是我第一次看到两个级别的大括号。 clojure在解构中是否支持n级?我在上面假设:params地图被解构为[params remote]?
答案 0 :(得分: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"]
。