[解決済み] 匿名関数の略記
2023-06-07 02:40:40
質問
無名関数が#(...)という短い記法を使うことについて、理解できないことがあります。
以下は動作します。
REPL> ((fn [s] s) "Eh")
"Eh"
しかし、これでは
REPL> (#(%) "Eh")
これは動作します。
REPL> (#(str %) "Eh")
"Eh"
私が理解できないのは、なぜ (#(%) "え")なのかです。 が機能しないこと、そして同時に、私は str で ((fn [s] s) "え")。
これらは両方とも無名関数で、ここではパラメータを1つ取ります。 なぜ省略記法は関数を必要とし、他の記法は必要としないのでしょうか?
どのように解決するのですか?
#(...)
の略記です。
(fn [arg1 arg2 ...] (...))
(と書くことができます(ここで、argNの数は本文中の%Nの数に依存します)。だから、書くときは
#(%)
に変換される。
(fn [arg1] (arg1))
のように、最初の無名関数と違うことに注意してください。
(fn [arg1] arg1)
あなたのバージョンはarg1を値として返しますが、短縮形を展開したバージョンはそれを関数として呼び出そうとします。文字列は有効な関数ではないので、エラーが発生します。
省略記法は本文を囲む括弧のセットを提供するので、単一の関数呼び出しまたは特別なフォームを実行するためにのみ使用できます。
関連
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 与えられた名前と引数の型に一致する関数がない
-
[解決済み] Haskellでfilter関数を使うにはどうしたらいいですか?
-
[解決済み】コールバックをわかりやすく説明するには?ある関数から別の関数を呼び出すのとはどう違うのですか?
-
[解決済み】関数定義にジャンプする
-
[解決済み】Luaの.と:の違いについて
-
[解決済み] Clojureで関数の引数にデフォルト値を作成する方法
-
[解決済み] Scalaでメソッドをプロファイリングするには?
-
[解決済み] Visual Studioで関数のドキュメントを自動生成する
-
[解決済み] Swiftの静的関数変数
-
[解決済み] イテレータを受け取るRust関数はどう書けばいい?