clojure中的解构 - 嵌入式地图

mur*_*a52 2 clojure

我在环处理函数中遇到了下面的解构 -

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

这很奇怪,因为这是我第一次看到两个级别的大括号​​.clojure在解构中是否支持n级?我在上面假设:params地图被解构成[params remote]?

mic*_*kig 5

是的,Clojure支持解构嵌套数据结构,但我不知道它是否支持任意深度嵌套.这是一个解构映射的简单示例,其中两个键中的一个键具有相应值的向量:

(let [{[x y] :pos c :color}
      {:color "blue" :pos [1 2]}]
  [x y c])
Run Code Online (Sandbox Code Playgroud)

您的示例不止于此,因为它还使用了: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])
Run Code Online (Sandbox Code Playgroud)

两者都评估为["REMOTES" "PARAMS"].