2

リングハンドラー関数で以下の破壊に遭遇しました-

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

2 つのレベルのブレースを見たのはこれが初めてなので、奇妙です。clojure は破壊で n レベルをサポートしますか? 上記では、:params マップが [params remote] に分解されていると想定していますか?

4

1 に答える 1

5

はい、Clojure はネストされたデータ構造の分解をサポートしていますが、任意の深いネストをサポートしているかどうかはわかりません。以下はマップを分解する簡単な例で、2 つのキーの 1 つが対応する値のベクトルを持っています。

(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 に答える