問題タブ [flatmap]
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 - flatMap は正確に何をしますか?
学校のコーディング課題では、フラットマップを使用する必要がありますが、それが何をするのかまったくわかりません。オンラインで数ページ読んだり、教科書を読んだりしましたが、それが何をするのかまだ真に理解していません。マップが何をするかは知っていますが、何らかの理由でフラットマップに頭を悩ませるのは難しいです。誰でも助けることができますか?ありがとう。
さらに情報を追加するために、オンラインで例を見ると、フラットマップがマップとは異なるものを返す方法がわかります。しかし、flatmap が呼び出されたときに実際に行っていることは何でしょうか。flatmap は実際にどのように機能しますか? 結果を返す前に何をしていますか?
scala - Scala - オプションと Traversable の Seq をフラットマップする
大文字と小文字が一致する上に書かれた flatMap を考えてみましょう。例えば:
ただし、これはコンパイルされません。seq がすべて Option[Int] またはすべて Seq[Int] の場合、flatMap は機能します。ただし、Seq が Options と Seq の混合である場合はそうではありません。なぜそのような制限が設けられているのですか?これは、今のところ考えられない特定のあいまいさを解決しますか。
EDIT1 REPL からのコード スニペットの追加
EDIT2 フィリッポの答えの後、REPLで次のコードを試してみましたが、うまくいきました。
各シナリオで解像度はどのように異なりますか。さらに重要なことに、flatMap の代わりにマップすると、結果は作成した a と同じになりSeq
ます。
scala - なぜ flatMap が必要なのですか (一般的に)?
私はしばらくの間、FP 言語 (オンとオフ) を調べており、Scala、Haskell、F# などで遊んできました。私は見たものが好きで、FP の基本的な概念のいくつかを理解しています (圏論のバックグラウンドはまったくないので、数学については話さないでください)。
したがって、関数を取り、を返す型M[A]
が与えられます。しかし、関数を受け取って を返すものもあります。また、which を取り、 aを返すものもあります。map
A=>B
M[B]
flatMap
A=>M[B]
M[B]
flatten
M[M[A]]
M[A]
さらに、私が読んだソースの多くは、次のように説明flatMap
しmap
ていflatten
ます。
では、flatMap
が と同等のように思われる場合flatten compose map
、その目的は何ですか? この質問は実際には Scala 固有のものではないため、「理解のために」サポートするとは言わないでください。そして、私はその背後にある概念よりも、構文糖衣に関心がありません。Haskell のバインド演算子 ( >>=
) についても同じ疑問が生じます。どちらも圏論の概念に関連していると思いますが、私はその言語を話せません。
私は Brian Beckman の素晴らしいビデオDon't Fear the Monadを 2 回以上見たことがあります。これがモナド構成演算子であることがわかると思いますflatMap
が、彼がこの演算子を説明する方法で使用されているのを見たことがありません。この機能を実行しますか?もしそうなら、その概念をどのようにマッピングしflatMap
ますか?
ところで、私はこの質問について長い記事を書き、意味を理解するために実行した実験を示す多くのリストを作成し、この質問に遭遇して私flatMap
の質問のいくつかに答えました。ときどき、私は Scala の暗黙が嫌いです。彼らは本当に水を濁らせることができます。:)
swift - 2 次元配列でオプションをフラット化およびアンラップする
次のコードはその仕事をします。
しかし、次から次へと 2flatMap
つ続くと、見つかった場合にコードが読みやすくなりません。これをよりきれいな方法でどのように書きますか?