問題タブ [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.
javascript - JavaScriptのyieldキーワードは何ですか?
JavaScriptで「yield」キーワードについて聞いたのですが、それに関するドキュメントが非常に貧弱でした。誰かが私にその使用法とその使用目的を説明する(または説明するサイトを推奨する)ことができますか?
ruby - C# の「yield」キーワードに相当する Ruby、またはメモリを事前に割り当てずにシーケンスを作成する
C# では、次のようなことができます。
これは、その長さのコレクションをメモリに割り当てることなく、1000 万個の整数の列挙可能なシーケンスを返します。
Rubyで同等のことを行う方法はありますか? 私が対処しようとしている特定の例は、列挙される値のシーケンスへの長方形配列の平坦化です。戻り値はArray
orSet
である必要はありませんが、インデックスではなく、順番にのみ反復/列挙できるある種のシーケンスです。したがって、シーケンス全体を同時にメモリに割り当てる必要はありません。.NET では、これはIEnumerable
とIEnumerable<T>
です。
私は .NET の用語に精通しているため、Ruby の世界で使用されている用語を明確に説明していただけると助かります。
編集
おそらく、私の最初の質問は十分に明確ではありませんでしyield
た.C#とRubyでは意味が大きく異なるという事実が、ここでの混乱の原因だと思います.
メソッドでブロックを使用する必要があるソリューションは必要ありません。実際の戻り値を持つソリューションが必要です。戻り値により、シーケンスの便利な処理 (フィルタリング、射影、連結、圧縮など) が可能になります。
これは、私がどのように使用するかの簡単な例ですget_items
:
IEnumerable
C# では、を使用するメソッドを返すとyield return
、コンパイラは、この動作に対応するための舞台裏で有限状態マシンを生成します。Ruby の継続を使用して同様のことを達成できるのではないかと思いますが、例を見たことがなく、これがどのように行われるかについては明確ではありません。
Enumerable
これを達成するために私が使用する可能性は確かにあるようです。簡単な解決策はArray
(モジュールを含むEnumerable
)ですが、遅延して提供し、メモリスパイクをまったく回避できる場合は、メモリ内に N 個のアイテムを持つ中間コレクションを作成したくありません。
それでも意味が分からない場合は、上記のコード例を検討してください。 が呼び出されるget_items
列挙を返します。select
渡されるselect
のは、必要なときにいつでもシーケンス内の次のアイテムを提供する方法を知っているインスタンスです。重要なのは、アイテムのコレクション全体がまだ計算されていないことです。select
アイテムが必要な場合にのみ、アイテムを要求し、潜在的なコードget_items
が動作して提供します。この怠惰はチェーンに沿って運ばれ、要求されたselect
ときにのみシーケンスから次のアイテムを描画します。map
そのため、一度に 1 つのデータ項目に対して長い一連の操作を実行できます。実際、このように構造化されたコードは、無限のプロセスを処理することさえできます。メモリエラーのない一連の値。
したがって、この種の怠惰は C# で簡単にコーディングできますが、Ruby でそれを行う方法がわかりません。
それがより明確であることを願っています (今後は午前 3 時に質問を書かないようにします。)
javascript - Javascript チェック イールド サポート
JavaScript の yield キーワードについて読みましたが、それを自分のプロジェクトで使用する必要があります。このキーワードは特定のバージョンの JS から実装されていると読んだので、古いブラウザーではサポートされていないと思います (右?)。
yield キーワードがサポートされているかどうかを確認する方法はありますか? または、少なくとも JS のバージョンがそのキーワードを実装するバージョン (1.7) 以上であるかどうかを確認する方法はありますか?
python - cx_Oracle、ジェネレーター、Python のスレッド
接続オブジェクトが異なるスレッドで使用されている場合、cx_Oracle カーソルはどのように動作しますか? ジェネレーターはこの動作にどのように影響しますか? 具体的には...
編集:元のサンプル関数は正しくありませんでした。サブ関数によってジェネレーターが返されましたyield
が、ループ内で直接使用されていませんでした。finally
これにより、いつ実行されるか(実行後) が明確にreturn
なりますが、別のスレッドがカーソルの作成元の接続オブジェクトの使用を開始した場合にカーソルを使用できるかどうかはまだわかりません。実際には (少なくとも python 2.4 では)、構文エラーが発生するようですtry...finally
。yield
Get()
複数のスレッドから呼び出される関数です。接続はthreaded=False
引数で作成されます。
不思議なんだけど...
- スレッド 2 が現れて同じ接続オブジェクトを使用する場合、スレッド 1 の
cursor
オブジェクトは引き続き使用できますか? そうでない場合、何が起こる可能性がありますか?
私が見ている動作は、プロトコル エラーについて話している cx_Oracle の例外であり、その後に segfault が続きます。
python - Pythonに「yieldステートメントが多すぎる」というようなものはありますか?
ディレクトリのリストを作成してその中のファイルを読み取る場合、ディレクトリ内のすべてのファイルのリストを返す場合と比較して、yield のパフォーマンスが低下し始めるのはどの時点ですか?
ここでは、(潜在的に巨大な) リストを返すのに十分な RAM があると想定しています。
PS コメント内のコードのインライン化に問題があるため、ここにいくつかの例を示します。
舞台裏では、 glob への両方の呼び出しが os.listdir を使用するため、パフォーマンス的には同等のように見えます。しかし、この Python docは、glob.iglob の方が高速であることを暗示しているようです。
python - python2.4のyieldの回避策はfinally句のあるtryブロックでは許可されていません
私はpython2.4で立ち往生しているので、ジェネレーターまたはでfinally句を使用できませんyield
。これを回避する方法はありますか?
Python 2.4でこの制限を回避する方法についての言及は見つかりません。また、私が考えた回避策(主に__del__
、妥当な時間内に実行されるようにすることを含む)の大ファンではありません。あまり魅力的ではありません。
c# - PLINQ 遅延実行
実行が遅れた場合に、PLINQ を使用して並列処理がどのように機能するかを理解しようとしています。簡単な例を次に示します。
LINQ では、残りの値のクエリを実行せずに、実行が「領収書」値に到達して true を返すことを期待します。
これを並行して行うと、「受領」の結果が返される前に「救済」の評価が開始されている可能性があります。しかし、クエリが「受信」が真の結果をもたらすことを認識したら、他のスレッドはすぐに譲歩しますか?
私の場合、これは重要です。「any」テストは非常にコストがかかる可能性があり、他のタスクを実行するためにプロセッサを解放したいからです。
ruby - Rubyで引数として複数のコードブロックを渡す
コードブロックを取るメソッドがあります。
そして私はそれをこのように呼びます:
opportunity { @some_array.empty? }
しかし、次のように、yieldを2回使用できるように、複数のコードブロックを渡すにはどうすればよいですか。
と:
この例は譲歩なしで実行できることを私は知っていますが、それは単に説明するためのものです。
python - リストからすべての値をPythonで生成する方法は?
返さないで値を生成したいリストがあるとします。それを行うための最もpythonicな方法は何ですか?
これが私の言いたいことです。非遅延計算のおかげで list を計算しました['a', 'b', 'c', 'd']
が、プロジェクトのコードは遅延計算を使用しているため、リスト全体を返すのではなく、関数から値を生成したいと考えています。
私は現在、次のように書いています。
しかし、これは私にはpythonicではありません。