問題タブ [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.

0 投票する
2 に答える
451 参照

java - Javaの匿名内部クラスがスコープを「失う」方法はありますか?

匿名内部クラスを関数に渡すと、次のように、そのクラスのメソッド内から現在のスコープ内の変数を参照できます。

さて、上記の someMethod が実行された後、Caller と小さな anons を持つキューは別々の道を進むことができます。私が理解している限り、JVM はすべての参照をまっすぐに保ち、これが常に機能するようにします。

しかし、たとえば、キュ​​ーがシリアル化され、プログラムがシャットダウンされて再起動された後、キューが逆シリアル化され、その中のアイテムが実行され、Caller インスタンスがなくなって忘れ去られた場合はどうなるでしょうか?

また、anon クラス内の呼び出しが機能しなくなる方法で、周囲のオブジェクトと匿名の内部クラスを分離する他の方法はありますか?

0 投票する
2 に答える
1562 参照

language-design - 可変または不変のクロージャ

命令型のオブジェクト指向言語では、ミュータブルまたはイミュータブルなクロージャーを持つ方が理にかなっていますか?

例えば:

クロージャーが変更可能な場合、これは次のように出力されます。

不変の場合は、次のように出力されます。

不変のクロージャーを使用しても、これを実行できることを認識しています。

では、ミュータブルまたはイミュータブルなクロージャーを用意した方がよいでしょうか、それとも両方のオプションを用意したほうがよいのでしょうか? イミュータブル クロージャは実装しやすいように思われるので、現時点では、そうしない正当な理由がない限り、それを使用すると思います。

0 投票する
1 に答える
1135 参照

c# - 匿名メソッドでキャプチャされた値を .NET に実装する方法

実際の .NET 実装とその背後にある決定に興味があります。

たとえば、Java では、匿名クラスで使用されるすべてのキャプチャ値が final である必要があります。この要件は、.NET では削除されたようです。

また、参照型とは対照的に、値型のキャプチャされた値の実装に違いはありますか?

ありがとう

0 投票する
44 に答える
443643 参照

javascript - ループ内のJavaScriptクロージャ–簡単な実用例

これを出力します:

私の価値:3
私の価値:3
私の価値:3

出力したいのですが:

私の価値:0
私の価値:1
私の価値:2


関数の実行の遅延がイベントリスナーの使用によって引き起こされた場合にも、同じ問題が発生します。

…または非同期コード、たとえばPromisesの使用:

それはまたfor infor ofループで明らかです:

この基本的な問題の解決策は何ですか?

0 投票する
3 に答える
4244 参照

groovy - Javaの内部クラスを置き換える最高のグルーヴィーなクロージャーイディオム?

Groovyの初心者として...

イベントリスナー、フィルターなどの Java イディオムを置き換えようとしています。

groovy での私の作業コードは次のとおりです。

これは、ODB.getObjects() メソッド内で Query インターフェースの実装が行われる Java で慣れ親しんだものとはかけ離れています。「Java」をコーディングする場所があれば、おそらく次のようなことをするでしょうが、まだ機能していません。

または、次のようにしたいと思います。

ただし、「一致」メソッドを外側のスクリプトコンテキストに関連付けて失敗させるために、Groovyが行うことは何ですか。

私はグルーヴィーだと思います...とにかくグルーヴィーなので、それについてもっと学ぶことに固執します。ありがとう。


私が尋ねるべきだったのは、groovy で「匿名」クラスをどのように行うかということでした。Java のイディオムは次のとおりです。

追加のクラス宣言なしで groovy を簡潔にできますか?

0 投票する
2 に答える
770 参照

c# - 閉鎖の何がそんなに特別なのですか?

私は彼らが言う閉鎖についてこの記事を読んでいます:

  • 「配管はすべて自動」
  • コンパイラは「ラッパークラスを作成」し、「変数の寿命を延ばします」
  • 「安心してローカル変数を使える」
  • .NET コンパイラが配管などを処理します。

だから私は彼らのコードに基づいて例を作った.

または、この「ローカル変数のラッピング」によって解決された、クロージャーを特別/興味深い/便利にする問題は何ですか?

答え

したがって、これに対する答えは、Marc が指摘したクロージャに関する Jon Skeet の記事を読むことです。この記事は、C# のラムダ式に至るまでの進化を示すだけでなく、Java でクロージャがどのように処理されるかについても示しており、このトピックの優れた読み物です。

0 投票する
7 に答える
30258 参照

groovy - Groovy クロージャーから戻ってその実行を停止するにはどうすればよいですか?

ループ内で break ステートメントを使用する場合のように、クロージャーから戻りたいと思います。

例えば:

上記の if ステートメントでは、リストの反復を停止し、不要な反復を避けるためにクロージャーを残したいと考えています。

例外がクロージャー内でスローされ、外部でキャッチされるソリューションを見たことがありますが、そのソリューションはあまり好きではありません。

この種のアルゴリズムを回避するためにコードを変更する以外に、これに対する解決策はありますか?

0 投票する
6 に答える
645 参照

java - Functional-Java を使用して Java プロダクション プロジェクトにクロージャを追加するのはどの程度安全でしょうか?

Javaでクロージャーを使いたいです。Java 7 に組み込まれるかどうかはわかりませんが、functional-javaと呼ばれるオープンソース プロジェクトでは、クロージャを含む機能的な機能が実装されています。

このようなライブラリをエンタープライズ プロダクション アプリで使用することは、どれほど安全でしょうか?

現在、Java にクロージャを追加するより良い方法はありますか?

0 投票する
4 に答える
2804 参照

closures - モナドとクロージャーの違いは何ですか?

私は2つの間の定義を読んで少し混乱しています。それらは実際に定義の観点から交差することができますか?または私は完全に失われていますか?ありがとう。