問題タブ [closures]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - .NET の「クロージャー」とは何ですか?
閉鎖とは?それらは .NET に含まれていますか?
それらが .NET に存在する場合、それを説明するコード スニペット (できれば C#) を提供していただけますか?
closures - クロージャと文脈自由文法
理論上のコンピューター サイエンス クラスのシラバスを調べていると、Context Free Grammars の見出しに「クロージャ プロパティ」がリストされています。私はこのテーマについて教科書を調べましたが、ほとんど見つかりませんでした。現時点では、私の頭の少し上にありますが(まだコースを受講していません)、少し理解しています.
文脈自由文法内のクロージャのこの考え方は、関数型プログラミング内のクロージャの考え方と同じか、または関連しているかどうか疑問に思っていました。私が知る限り、文法を組み合わせて重複を解決することについて話しています。この本のセクションにはまだ理解できない部分がたくさんあるので、これらのアイデアが同じかどうかはわかりません.
(もう少し文脈: Perl から Ruby または Python にコースを切り替えることができるかどうかを教授に尋ねるメールを書いています。これらの概念が関連している場合、Perl よりも Ruby を使用する必要がある別の理由になる可能性があります。)
ruby - Rubyで関数を引数として渡す
Ruby で関数型プログラミングについて頭を悩ませようとしていますが、適切なドキュメントがあまりないようです。
基本的に、次の Haskell 型シグネチャを持つ結合関数を作成しようとしています。
そう
等
zip と map の使用に関するいくつかの情報を見つけましたが、これは非常に使いにくいと感じます。
このようなものを実装する最も「ルビー」な方法は何でしょうか?
java - Java と JavaScript のコールバックの比較
思ったほどJavaScriptのコールバックが理解できていないようです。
次の例では、setTimeout 内の関数の各コピーが変数「index」の独自のコピーを参照すると考えられます。したがって、この例を実行すると、「zero」「one」「two」というアラートが生成されます。
ただし、インデックス変数のコピーは 1 つしかないようで、コールバック関数のすべてのコピーが同じ変数を指しているため、「2 つ」「2 つ」「2 つ」というアラートが表示されます。
次の類似した (私が考えた) Java の例は、予想どおり、「ゼロ」「1」「2」を出力します。
js の例が機能しない理由を説明して、2 つの例で何が起こっているかを比較できますか?
javascript - このコードが機能しない原因は何ですか?
なぜこれが機能しないのかを理解しようとしています。(まだ検証されていない基本的な例)
テストすると、firebug は Product.addPage が見つからないと述べています。
javascript - jQueryのeach()を使用したJavaScriptでのよりクリーンな(ネストされた)クロージャ
each()
次のJavaScriptコードで何をしているのかをよりクリーンな(より簡潔な)方法で実行できるかどうか疑問に思いました。
最後の呼び出しでdom要素が並べ替えられるため、.moreinfodialog
クラスがhrefsの隣にないことに注意してください。
ところで:このソースはjquery / jquery-uiダイアログを使用して、.moreinfodialog
クラスのdiv内のテキストを非表示にし、テキストに置き換えClick for more info.
ます。そのテキストをクリックすると、元のdiv内のテキストを含むダイアログが表示されます。
python - (リスト内包表記/for ループで) ラムダのリストを作成するにはどうすればよいですか?
Python で定数のリストからラムダ オブジェクトのリストを作成したいと考えています。例えば:
ただし、これを実行すると、ラムダ オブジェクトのリストが作成されます。
私はそれが印刷されることを期待します
代わりに、次のように出力します。
ラムダにすべて間違ったパラメータが与えられているようです。私は何か間違ったことをしましたか?それを修正する方法はありますか? 私はPython 2.4にいると思います。
編集:もう少し試してみると、これが思いつきました:
予想される 1 から 25 までの正方形を出力しますが、以前の print ステートメントを使用します。
それでも私にすべて25
のsを与えます。これら 2 つの印刷呼び出しの間で、既存のラムダ オブジェクトはどのように変化したのでしょうか?
関連する質問: map() とリスト内包表記の結果が異なるのはなぜですか?
javascript - それらがどのように構築されているかに基づいて、コールバックもクロージャーとして定義できますか?
JavaScript では、クロージャーは、それを含む関数の変数にアクセスできるネストされた関数として定義できることを知っています。例えば:
onreadystatechange
次のコードは、リクエスト オブジェクトのプロパティのコールバックを接続しています。ただし、定義により、これもクロージャーと見なされるかどうか疑問に思っていました。
このhandleResponse
関数は のコンテキストで無名関数として記述することもできsubmitHandler
ますが、コールバックをコールバックする関数のスコープ外でコールバックを定義すると、より複雑な Ajax コードをより読みやすく、簡単に保守できることがわかりました。繰り返しますが、これは私の質問の要点を単に示すことを期待して私が使用している不自然な例です。
c# - C# でクロージャが不変でない理由はありますか?
私は頭の中でこれを何度も繰り返してきましたが、C# クロージャが変更可能である正当な理由が思いつかないようです。何が起こっているのかを正確に認識していない場合、意図しない結果を得るには良い方法のように思えます.
たぶん、もう少し知識のある人は、C# の設計者がクロージャーで状態を変更できる理由を明らかにすることができますか?
例:
これにより、最初の呼び出しでは「hello」が出力されますが、2 回目の呼び出しでは外部の状態が変化し、「さようなら」が出力されます。クロージャの状態が更新され、ローカル変数への変更が反映されました。
python - バインドされたメソッドを関数のように動作させる最も Pythonic な方法は何ですか?
関数を渡すことを期待する Python API を使用しています。ただし、さまざまな理由から、メソッドを渡したいと思います。これは、関数が属するインスタンスに応じて関数の動作が異なるようにするためです。メソッドを渡すと、API は正しい「自己」引数でそれを呼び出しません。そのため、メソッドを、それが属する「自己」を認識する関数に変換する方法を考えています。
これを行うには、ラムダやクロージャーを使用するなど、いくつかの方法が考えられます。以下にいくつかの例を示しますが、同じ効果を達成するための標準的なメカニズムがあるかどうか疑問に思っています。