1

次のClojureコードがあります

(defn myFunction [{:keys [a b c] :as myAtom}]
  (let [new-a 1]
    (+ new-a a)
  (assoc myAtom :a new-a)))

:keys と :as の仕組みを知りたい

4

1 に答える 1

1

最初の行は、マップでなければならない単一の引数を取る関数を (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} 
于 2013-03-28T18:17:53.140 に答える