Clojure - 名前付き引数
2023-07-28 19:57:10
質問
Clojureには名前付き引数がありますか?もしそうなら、その小さな例を提示してもらえますか?
どのように解決するのですか?
Clojure 1.2において、Clojure 1.1.0からClojure 1.2.0への移行に伴って
rest
をマップを再構築するのと同じように再構築できます。これは、名前付き非位置指定キーワード引数を行えることを意味します。以下はその例です。
user> (defn blah [& {:keys [key1 key2 key3]}] (str key1 key2 key3))
#'user/blah
user> (blah :key1 "Hai" :key2 " there" :key3 10)
"Hai there10"
user> (blah :key1 "Hai" :key2 " there")
"Hai there"
user> (defn blah [& {:keys [key1 key2 key3] :as everything}] everything)
#'user/blah
user> (blah :key1 "Hai" :key2 " there")
{:key2 " there", :key1 "Hai"}
何でも は、Clojureマップを再構築している間にできることは、上に示すように関数の引数リストで行うことができます。このように引数のデフォルトを定義するために :or を使用することも含みます。
user> (defn blah [& {:keys [key1 key2 key3] :or {key3 10}}] (str key1 key2 key3))
#'user/blah
user> (blah :key1 "Hai" :key2 " there")
"Hai there10"
しかし、これはClojure 1.2での話です。あるいは、古いバージョンでは、同じことをシミュレートするために、これを行うことができます。
user> (defn blah [& rest] (let [{:keys [key1 key2 key3] :or {key3 10}} (apply hash-map rest)] (str key1 key2 key3)))
#'user/blah
user> (blah :key1 "Hai" :key2 " there")
"Hai there10"
で、これもだいたい同じように動きます。
そして、キーワード引数の前に来る位置引数も持つことができます。
user> (defn blah [x y & {:keys [key1 key2 key3] :or {key3 10}}] (str x y key1 key2 key3))
#'user/blah
user> (blah "x" "Y" :key1 "Hai" :key2 " there")
"xYHai there10"
これらはオプションではなく、必ず提供されなければなりません。
を実際に再構築することができます。
rest
の引数は、Clojureのコレクションと同じように再構成できます。
user> (defn blah [& [one two & more]] (str one two "and the rest: " more))
#'user/blah
user> (blah 1 2 "ressssssst")
"12and the rest: (\"ressssssst\")"
Clojure 1.1でもこのようなことは可能です。しかし、キーワード引数のためのマップスタイルの再構築は1.2になってからです。
関連
-
[解決済み】ClojureでWebアプリケーションを作るには?[クローズド]
-
[解決済み] javaからclojureを呼び出す
-
[解決済み] Lispに関するPaul Grahamの指摘を説明してください [closed].
-
[解決済み] clojureプロトコルの簡単な説明
-
[解決済み] ClojureでStringを数値に変換するにはどうしたらいいですか?
-
[解決済み] Clojure: リデュース vs. アプライ
-
[解決済み] Clojureはどんなことに使えるの?[クローズド]
-
[解決済み] Clojureと他のLispsの比較 [終了しました]。
-
[解決済み] Clojureでは、リストタイプを変換する簡単な方法はありますか?
-
[解決済み] ベクトル中のある項目のインデックスを見つけるにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ClojureでWebアプリケーションを作るには?[クローズド]
-
[解決済み] useとrequireの違い
-
[解決済み] 実社会で活躍するLisp【クローズド
-
[解決済み] Clojure、Scheme/Racket、Common Lispの違いは何ですか?
-
[解決済み] Clojureのブロックコメント
-
[解決済み] Lisp-1とLisp-2の違いは何ですか?
-
[解決済み] Clojureでは、リストタイプを変換する簡単な方法はありますか?
-
[解決済み] Clojureのフューチャーとプロミスはどう違うのか?
-
[解決済み] ベクトル中のある項目のインデックスを見つけるにはどうすればよいですか?
-
[解決済み] clojureの::は何に使われるのですか?