次のClojureコードがあります
(defn myFunction [{:keys [a b c] :as myAtom}]
(let [new-a 1]
(+ new-a a)
(assoc myAtom :a new-a)))
:keys と :as の仕組みを知りたい
次のClojureコードがあります
(defn myFunction [{:keys [a b c] :as myAtom}]
(let [new-a 1]
(+ new-a a)
(assoc myAtom :a new-a)))
:keys と :as の仕組みを知りたい
最初の行は、マップでなければならない単一の引数を取る関数を (var で) 定義します。
(defn myFunction [{:keys [a b c] :as myAtom}]
次に、指定さa
b
c
れたシンボルを、その引数のキーワードとして各シンボルを検索して取得した値にバインドし、名前 myatom を元のマップにバインドするlet ステートメントを作成します。
(let [new-a 1]
new-a
次に、値1にバインドします
(+ new-a a)
いくつかの計算を行い、結果を無視します
(assoc myAtom :a new-a)))
この最後のセグメントは、(引数として渡された) マップ全体にバインドされたシンボルを as として使用し、assoc を呼び出して、:a を new-a の値に関連付ける新しいマップを作成します。次に、それを関数の値として返します。
これは、:a の値が 1 の新しいマップを返します。
user> (myFunction {:a 3 :b 3 :c 3})
{:a 1, :c 3, :b 3}