問題タブ [yield]

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 投票する
14 に答える
148069 参照

javascript - JavaScriptのyieldキーワードは何ですか?

JavaScriptで「yield」キーワードについて聞いたのですが、それに関するドキュメントが非常に貧弱でした。誰かが私にその使用法とその使用目的を説明する(または説明するサイトを推奨する)ことができますか?

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

ruby - C# の「yield」キーワードに相当する Ruby、またはメモリを事前に割り当てずにシーケンスを作成する

C# では、次のようなことができます。

これは、その長さのコレクションをメモリに割り当てることなく、1000 万個の整数の列挙可能なシーケンスを返します。

Rubyで同等のことを行う方法はありますか? 私が対処しようとしている特定の例は、列挙される値のシーケンスへの長方形配列の平坦化です。戻り値はArrayorSetである必要はありませんが、インデックスではなく、順番にのみ反復/列挙できるある種のシーケンスです。したがって、シーケンス全体を同時にメモリに割り当てる必要はありません。.NET では、これはIEnumerableIEnumerable<T>です。

私は .NET の用語に精通しているため、Ruby の世界で使用されている用語を明確に説明していただけると助かります。

編集

おそらく、私の最初の質問は十分に明確ではありませんでしyieldた.C#とRubyでは意味が大きく異なるという事実が、ここでの混乱の原因だと思います.

メソッドでブロックを使用する必要があるソリューションは必要ありません。実際の戻り値を持つソリューションが必要です。戻り値により、シーケンスの便利な処理 (フィルタリング、射影、連結、圧縮など) が可能になります。

これは、私がどのように使用するかの簡単な例ですget_items:

IEnumerableC# では、を使用するメソッドを返すとyield return、コンパイラは、この動作に対応するための舞台裏で有限状態マシンを生成します。Ruby の継続を使用して同様のことを達成できるのではないかと思いますが、例を見たことがなく、これがどのように行われるかについては明確ではありません。

Enumerableこれを達成するために私が使用する可能性は確かにあるようです。簡単な解決策はArray(モジュールを含むEnumerable)ですが、遅延して提供し、メモリスパイクをまったく回避できる場合は、メモリ内に N 個のアイテムを持つ中間コレクションを作成したくありません。

それでも意味が分からない場合は、上記のコード例を検討してください。 が呼び出されるget_items列挙を返します。select渡されるselectのは、必要なときにいつでもシーケンス内の次のアイテムを提供する方法を知っているインスタンスです。重要なのは、アイテムのコレクション全体がまだ計算されていないことです。selectアイテムが必要な場合にのみ、アイテムを要求し、潜在的なコードget_itemsが動作して提供します。この怠惰はチェーンに沿って運ばれ、要求されたselectときにのみシーケンスから次のアイテムを描画します。mapそのため、一度に 1 つのデータ項目に対して長い一連の操作を実行できます。実際、このように構造化されたコードは、無限のプロセスを処理することさえできます。メモリエラーのない一連の値。

したがって、この種の怠惰は C# で簡単にコーディングできますが、Ruby でそれを行う方法がわかりません。

それがより明確であることを願っています (今後は午前 3 時に質問を書かないようにします。)

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

javascript - Javascript チェック イールド サポート

JavaScript の yield キーワードについて読みましたが、それを自分のプロジェクトで使用する必要があります。このキーワードは特定のバージョンの JS から実装されていると読んだので、古いブラウザーではサポートされていないと思います (右?)。

yield キーワードがサポートされているかどうかを確認する方法はありますか? または、少なくとも JS のバージョンがそのキーワードを実装するバージョン (1.7) 以上であるかどうかを確認する方法はありますか?

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

python - cx_Oracle、ジェネレーター、Python のスレッド

接続オブジェクトが異なるスレッドで使用されている場合、cx_Oracle カーソルはどのように動作しますか? ジェネレーターはこの動作にどのように影響しますか? 具体的には...

編集:元のサンプル関数は正しくありませんでした。サブ関数によってジェネレーターが返されましたyieldが、ループ内で直接使用されていませんでした。finallyこれにより、いつ実行されるか(実行後) が明確にreturnなりますが、別のスレッドがカーソルの作成元の接続オブジェクトの使用を開始した場合にカーソルを使用できるかどうかはまだわかりません。実際には (少なくとも python 2.4 では)、構文エラーが発生するようですtry...finallyyield

Get()複数のスレッドから呼び出される関数です。接続はthreaded=False引数で作成されます。

不思議なんだけど...

  1. スレッド 2 が現れて同じ接続オブジェクトを使用する場合、スレッド 1 のcursorオブジェクトは引き続き使用できますか? そうでない場合、何が起こる可能性がありますか?

私が見ている動作は、プロトコル エラーについて話している cx_Oracle の例外であり、その後に segfault が続きます。

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

python - Pythonに「yieldステートメントが多すぎる」というようなものはありますか?

ディレクトリのリストを作成してその中のファイルを読み取る場合、ディレクトリ内のすべてのファイルのリストを返す場合と比較して、yield のパフォーマンスが低下し始めるのはどの時点ですか?

ここでは、(潜在的に巨大な) リストを返すのに十分な RAM があると想定しています。

PS コメント内のコードのインライン化に問題があるため、ここにいくつかの例を示します。

舞台裏では、 glob への両方の呼び出しが os.listdir を使用するため、パフォーマンス的には同等のように見えます。しかし、この Python docは、glob.iglob の方が高速であることを暗示しているようです。

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

python - python2.4のyieldの回避策はfinally句のあるtryブロックでは許可されていません

私はpython2.4で立ち往生しているので、ジェネレーターまたはでfinally句を使用できませんyield。これを回避する方法はありますか?

Python 2.4でこの制限を回避する方法についての言及は見つかりません。また、私が考えた回避策(主に__del__、妥当な時間内に実行されるようにすることを含む)の大ファンではありません。あまり魅力的ではありません。

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

c# - PLINQ 遅延実行

実行が遅れた場合に、PLINQ を使用して並列処理がどのように機能するかを理解しようとしています。簡単な例を次に示します。

LINQ では、残りの値のクエリを実行せずに、実行が「領収書」値に到達して true を返すことを期待します。

これを並行して行うと、「受領」の結果が返される前に「救済」の評価が開始されている可能性があります。しかし、クエリが「受信」が真の結果をもたらすことを認識したら、他のスレッドはすぐに譲歩しますか?

私の場合、これは重要です。「any」テストは非常にコストがかかる可能性があり、他のタスクを実行するためにプロセッサを解放したいからです。

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

ruby - Rubyで引数として複数のコードブロックを渡す

コードブロックを取るメソッドがあります。

そして私はそれをこのように呼びます:

opportunity { @some_array.empty? }

しかし、次のように、yieldを2回使用できるように、複数のコードブロックを渡すにはどうすればよいですか。

と:

この例は譲歩なしで実行できることを私は知っていますが、それは単に説明するためのものです。

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

python - リストからすべての値をPythonで生成する方法は?

返さないで値を生成したいリストがあるとします。それを行うための最もpythonicな方法は何ですか?

これが私の言いたいことです。非遅延計算のおかげで list を計算しました['a', 'b', 'c', 'd']が、プロジェクトのコードは遅延計算を使用しているため、リスト全体を返すのではなく、関数から値を生成したいと考えています。

私は現在、次のように書いています。

しかし、これは私にはpythonicではありません。