Clojureキーワード引数
-
23-08-2019 - |
質問
共通Lispを実行します。
(defun foo (bar &key baz quux)
(list bar baz quux))
(foo 1 :quux 3 :baz 2) ; => (1 2 3)
Clojureないキーワード引数になります。一つの方法ではあります:
(defn foo [bar {:keys [baz quux]}]
(list bar baz quux))
(foo 1 {:quux 3 :baz 2}) ; => (1 2 3)
るものが多く入れ子ブラケットをしているタイプと読みます。その後も、明示的なハッシュマップに渡された引数としてではなく平らで一覧です。
どの慣用的Clojure相当するキーワード引数がどんな人にオ句読点爆?
解決
のClojureのキーワード引数をシミュレートする簡単な方法は、このような残りのパラメータのハッシュマップを使用しています:
> (defn kwtest [x & e] (:foo (apply hash-map e)))
#'user/kwtest
> (kwtest 12 :bar "ignored" :foo "returned")
"returned"
リッチヒッキーはにそののClojureのグーグルグループからこのメッセージをマクロを提供しましたあなたのキーワードパラメータを与えます。対応するスレッドのrel="noreferrer"> このメッセージの
上に示してきた方法を説明します他のヒント
のマップ形式で提供されたデフォルト値を持つ今、フルキーワード引数のサポートがあるのClojure 1.2のために、この答えを更新するには構造化代入結合するます:
user> (defn foo [bar &{ :keys [baz quux]
:or {baz "baz_default" quux "quux_default"}}]
(list bar baz quux))
#'user/foo
user> (foo 1 :quux 3)
(1 "baz_default" 3)
最近のほか、 clojure.contrib.def
は defnk
マクロを定義の機能とキーワード引数を参照 こちらの).
所属していません StackOverflow