問題タブ [for-comprehension]

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 に答える
1451 参照

scala - Scalaの無限ストリームでのネストされた反復

理解のためにScalaの無限ストリームに対してネストされた反復を実行したい場合がありますが、ループの終了条件を指定するのは少し難しい場合があります。このようなことをするためのより良い方法はありますか?

私が念頭に置いているユースケースは、反復している無限のストリームのそれぞれから必要な要素の数を前もって必ずしも知らない場合です(ただし、明らかに、無限の数にはならないことはわかっています)。各ストリームの終了条件は、for式の他の要素の値に複雑な方法で依存する可能性があると想定します。

最初の考えは、 for式のifフィルター句としてストリーム終了条件を書き込もうとすることですが、最初の無限ストリームの反復を短絡する方法がないため、ネストされた無限ストリームをループするときに問題が発生します。これは最終的にOutOfMemoryErrorにつながります。式がmaptomapflatMapwithFilterメソッドを呼び出す方法考えると、これが当てはまる理由を理解しています-私の質問は、この種のことを行うためのより良いイディオムがあるかどうかです(おそらく理解にはまったく関係ません)。

今説明した問題を説明するためにやや不自然な例を示すために、次の(非常に単純な)コードを検討して、番号1と2のすべてのペアを生成します。

明らかに、この単純な例では、次のように、 ifフィルターを元のストリームのtakeWhileメソッド呼び出しに移動することで、問題を簡単に回避できます。

しかし、質問の目的のために、ストリームの終了条件をストリーム式自体に簡単に移動できない、より複雑なユースケースを想像してみてください。

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

scala - for内包内で暗黙のvalを宣言する方法はありますか?

次のように、flatMap へのネストされた呼び出しを含むコードがいくつかあります。

通常、これを for 内包表記として記述し、コードをより読みやすくします。

しかし、私fは暗黙的である必要があり、理解のためにそれを行う方法がわかりません。ある?もちろん、明示的に f を渡すこともできますが、それはさようならかなり DSL を意味します。Scala 2.9 と 2.10 の両方の回答に興味があります。

明確にするために、私はこのようなことをしたいのですが、コンパイルされません:

編集:多分機能要求は良い考えでしょうか?

EDIT2:これは、 for 内包表記で使用できるすべての型で機能するはずです。そのため、ListorSeqのような通常のコレクション型だけでなく、Future.

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

scala - Scala for-comprehensions の val のスコープ規則は何ですか?

for-comprehension で val を使用すると、次の警告が表示されます。

警告: 内包表記の val キーワードは非推奨です

仕様の構文付録での生産にもかかわらず。

これは、私が次のようなことをするときに

次のようなことをする場合など、変数を実際に導入しているわけではありません

ここで、いつものように、ブレースは新しいスコープを開始し、そこで新しい val または新しい Implicit を導入できます。

私は本当にそれで何をしているのaですか?

スタックスペースを消費していますか? ヒープ?別の別名?

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

scala - 理解のための Scala の背後にあるインデックス可能なデータ構造

Martin Odersky による Coursera での Scala に関する講義の第 6 週を見終わったところです。講義 5 で、彼は次のように述べています。

「... forの翻訳は、リストやシーケンス、さらにはコレクションに限定されません。

メソッドmap、flatMap、および withFilterの存在のみに基づいています。

これにより、独自の型にも for 構文を使用できます。これらの型には、map、flatMap、および withFilter のみを定義する必要があります。"

私が解決しようとしている問題は、いくつかのデータベースからデータをロードし、データを結合して何らかの方法で結果をエクスポートするバッチ プロセスがあることです。データはメモリに収まるほど小さい (各ソース システムから 100,000 レコード程度) が、パフォーマンスを考慮することが重要なほど大きい。

従来のインメモリ データベース (H2 など) を使用して、ScalaQuery などを介してアクセスすることもできますが、実際に必要なのは、さまざまなソース システムからのデータを効率的に検索して結合できる方法だけです。これは、SQL のインデックスと同等です。およびJOIN。Scala 固有のデータ構造によって簡単かつ効率的に解決できるものに、本格的なリレーショナル データベース + Scala ORM を使用するのは、非常に厄介です。

私の最初の素朴なアプローチは、(データベース システムのように B ツリーとして実装できる) 1 つ以上の "インデックス" と組み合わせた (高速な直接アクセスのための) ベクター データ構造です。この結合されたデータ構造のmap、flatMap、withFilterメソッドは、クエリされたフィールドにインデックスがある場合、インデックスを使用するのに十分なほどインテリジェントである可能性があります。または、インデックスを使用するための「ヒント」がある可能性があります。

そのようなデータ構造がすでに存在して利用可能かどうか、または自分で実装する必要があるかどうか疑問に思っていましたか? この問題を解決する Scala のライブラリまたはコレクション フレームワークはありますか?

0 投票する
5 に答える
23465 参照

scala - Scala for-comprehensions の Future[Option]

Futures を返す関数が 2 つあります。for-yield 内包表記を使用して、最初の関数から変更された結果を別の関数にフィードしようとしています。

このアプローチは機能します:

ただし、「if」が含まれていることに満足していません。代わりにマップを使用できるようにする必要があるようです。

しかし、地図を試してみると:

コンパイル エラーが発生します。

いくつかのバリエーションで遊んでみましたが、機能する魅力的なものは見つかりませんでした. 誰かがより良い理解を提案したり、私の2番目の例の何が問題なのかを説明したりできますか?

以下は、Scala 2.10 で最小限だが完全に実行可能な例です。

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

scala - Scala の for-comprehension (アイデンティティ マップ) の最適化

map(identity)Scala内包表記を避けるにはどうすればよいforですか?

たとえば、次のことを考慮してください。

IIUC、理解は次のforようなものに変換されます

map(identity)何らかの方法で末尾を回避できますか? それとも、Scala はそれを最適化できますか? map(副作用があるかどうかは不明なので、できないと思いますよね?)

PS この特定の例では、物事を改善できることを知っています。たとえば、未来を返す関数Future { value * 2}の呼び出しである一般的なケースについて疑問に思っています。f(value)f

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

scala - 共変/反変型パラメータを持つクラスの flatMap を定義する方法は?

共変と反変の型パラメーターを持つクラスがあるとします。

そして、このクラスのインスタンスに対して定義されたモナド操作があります。

for-comprehensionを使用できるようにするにflatMapは、それがトレイト自体のメソッドである必要があります。

ただし、これはコンパイルされず、失敗します

反変型は、値のI型の共変位置にあります。(R) => Pipe[I,O,R1]f

(共変型パラメータでも同様のエラーが発生します。)

制限と問題が発生する理由を理解しています。しかし、上記と同じセマンティクスflatMapを使用して特性を定義する方法はありますか? Pipes.flatMapおそらく、いくつかの暗黙的な変換や中間ビルダー クラスを使用していますか?

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

list - Can't get flatten of 理解するために試してみてください

これは文体に関する質問と、Scala の理解を深めるための私の試みの組み合わせです。

Future を含むリストを取得しました。Future の値を計算し、Option に変換し、for 内包表記を使用してリストを平坦化します。

私がやりたいのは、フラット化されたステージを理解することです。誰か提案はありますか?

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

coffeescript - coffeescript 内包を通じてコールバックから結果を収集することは可能ですか?

オブジェクトの配列があり、それぞれに非同期readValue関数があり、コールバックをパラメーターとして受け入れ、このオブジェクトの値が利用可能になったときに起動されるとします。

私の目標は、各オブジェクトのすべての値を計算し、それらの値を含む配列を返すことです。

最初に頭に浮かんだのはこれ

メソッドは非同期であるためreadValue、それを呼び出す関数も非同期です。すべての値がresult配列になると、callback関数が実行されます。

しかし、これはすべて面倒に思えます。これは、coffeescript が本当に強力な領域です。内包表記が少ないコードでもこの関数を書くことは可能ですか? 同期であればOKです。