2

我在环处理程序函数中遇到了以下解构 -

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

这很奇怪,因为这是我第一次看到两个级别的牙套。clojure 是否支持解构中的 n 个级别?我在上面假设 :params 映射被解构为 [params remote] ?

4

1 回答 1

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"]

于 2013-03-08T03:51:52.923 回答