問題タブ [iterate]
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.
scala - スタックオーバーフロー例外を回避するために、列挙子ループファイルコンテンツを再帰的に作成する方法
最近、私はScalaz チュートリアルで遊んでいました: Rúnar によって書かれた反復ベースの I/O
ファイルの列挙の実装について質問があります。
私のコードの理解: enumReader はiterateeからDoneまたはContのシグナルを取得しています。 Contの場合、 loop を再帰的に呼び出します。
ただし、このループは末尾再帰ではありません。注釈@tailrecを使用してコンパイル エラーを発生させます。したがって、 enumReader が大きなファイルを読み込もうとすると、stackoverflow exceptionが発生することが問題だと思います。
また、難しいと思う理由は、通常、通常の再帰を末尾再帰に変更したい場合、パラメーターでアキュムレータを使用するためですが、この場合、それは関数 IterV[String, A] = です> IO[IterV[文字列, A]]
編集:さらに、 CountのようなIterateeメソッドにも同じstackoverflow例外があると思います。
誰かがこれをリファクタリングする方法を教えてもらえますか?
よろしくお願いします
scala - Scalaz iteratees: 「リフティング」 `EnumeratorT` を `IterateeT` に合わせて「より大きな」モナドにする
EnumeratorT
と が対応する場合、IterateeT
それらを一緒に実行できます。
列挙子モナドが iteratee モナドよりも「大きい」場合、一致するように iteratee を「リフト」するup
か、より一般的には使用できます。Hoist
しかし、反復モナドが列挙子モナドよりも「大きい」場合はどうすればよいでしょうか?
Hoist
のインスタンスEnumeratorT
も、明らかな「リフト」メソッドもないようです。
scala - 列挙されたファイルを閉じるには?
私が持っているアクションで言ってください:
リーダー/ストリームを閉じるには?
scala - Play Scala で Iteratee と Enumerator を使用してデータを S3 にストリーミングする
バイト配列を S3 にストリーミングしたい Play Framework アプリケーションを Scala で構築しています。これを行うためにPlay-S3ライブラリを使用しています。ドキュメントセクションの「マルチパートファイルのアップロード」は、ここで関連するものです。
私は自分のアプリケーションで同じことをしようとしていますが、Iteratee
s とEnumerator
s を使用しています。
ストリームと非同期性により、少し複雑になりますが、これまでのところ、次のようになります (注uploadTicket
はコードの前半で定義されています)。
すべてが問題なくコンパイルおよび実行されます。実際、"Success"
印刷されますが、S3 にファイルが表示されることはありません。
scala - Play / Logging / Print Response Body / Run over enumerator / 本体のバッファリング
Play フレームワークで応答本文を出力する方法を探しています。次のようなコードがあります。
現在、コメントアウトされたコードは私が望むように機能していません。つまり、次のように出力されます。
そのため、Enumerator[Array[Byte]] から文字列を取得する方法を見つける必要があります。これを読んで列挙子の概念を把握しようとしました: http://mandubian.com/2012/08/27/understanding-play2-iteratees-for-normal-humans/
だから...、私がそれを正しく理解していれば:
列挙子を文字列に変換する過程で、列挙子を枯渇させるべきではありません。そうしないと、クライアントは何も受け取りません。
T / フィルターメカニズムを実装する方法を理解したとしましょう。しかし、それでは...非ブロッキングストリーミングフレームワークとしてのPlayフレームワークの目的を無効にしないでしょうか(toStringを呼び出す前に、メモリ内にバイトの完全な配列を構築し、最終的にログに記録するため)?
では、応答をログに記録する正しい方法は何ですか?
前もってありがとう、ラカ
scala - ステートフル アルゴリズムから列挙型を作成する
入力を段階的に受け取り、段階的に出力を生成するステートフル アルゴリズムがあります。入力と出力の数は無関係です。つまり、入力は 0 個以上の出力を生成する可能性があります。
私はそれをEnumeratee
Play フレームワークで に変換しようとしていますが、始めるのに苦労しています。
私のアルゴリズムには、ローカルの可変状態と同期操作があり、次のようになります
map
、filter
などの実装を で研究しましたが、Enumeratee.scala
ある程度は理解しています。しかし、もっと複雑なものの独自の実装を作成する方法がわかりません。
このアルゴリズムを に変換する方法を説明/実演していただけEnumeratee
ますか?
mongodb - ReactiveMongo を使用して、キャップされたコレクションから中断されるまでジョブを処理する
jobs_queue
MongoDBにコレクションがあります。これは、テーラブル カーソルを使用してポーリングしている上限付きコレクションです。
これは通常の Scala から呼び出されるApp
ため、Akka や Play のラッピングはまったくありません。
App
明示的に から抜け出すまで が終了しないようにする最も適切な方法はIteratee.foreach
何ですか? また、より単純な (多少エレガントでなくても) 方法があれば、play-iteratees をまったく使用する必要はありません。
PS 私はコレクションがキャップされていることを確認します:
PPS
また、このビットのロジックをどのように設計したか、およびアプローチを再考して実装を少し見直すことでこれを解決する方法についての批判も歓迎します。