リングハンドラー関数で以下の破壊に遭遇しました-
[{{:keys [params remote]} :params :as request}]
2 つのレベルのブレースを見たのはこれが初めてなので、奇妙です。clojure は破壊で n レベルをサポートしますか? 上記では、:params マップが [params remote] に分解されていると想定していますか?
リングハンドラー関数で以下の破壊に遭遇しました-
[{{:keys [params remote]} :params :as request}]
2 つのレベルのブレースを見たのはこれが初めてなので、奇妙です。clojure は破壊で n レベルをサポートしますか? 上記では、:params マップが [params remote] に分解されていると想定していますか?
はい、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"]
ます。