Scalaの高次関数定義から提供された例へのジャンプの方法を理解するのが難しいです。それはのslide 81に提供されました。ここでScala高次関数と提供された例との間の段階的な接続
は、高次関数の定義です:
trait X[A] { def map[B](f: A => B): X[B] }
は、ここで提供されている例です:
(1 to 10) map { x => x * 2 } // evaluates to Vector(2, 4, ..., 20)
(1 to 10) map { _ * 2 } // shorthand!
えっ!ここにいくつかのステップがあるだけで、私は行方不明です。私は、関数の定義といくつかのScalaの細かさの両方を活用した例が得られると思います。私はScalaを読んで、接続する前提をまだ十分に取っていない経験があります。
私の背景はJava OOです。 Scalaと関数型プログラミングを学んでいます。これは私が理解していないこのような最初の例ではありません。それはちょうど私が私が無知に見えることを知って投稿する勇気を感じた最初のものです。
私はこれを研究しようとしました。まず、Scalaの "bible"("Programming in Scala 2nd Edition")に行って、そこから(165-9ページ)感覚を覚えようとしました。次に、StackOverflowでここで検索しました。そして、その周辺を話すいくつかのリンクを見つけました。しかし、実際には、Scalaの高次関数定義と、このスライドの特定のインスタンスにマップされる方法で提供されたサンプルとの間の接続、STEP-BY-STEPを私に示しているものはありません。
は、ここで私はStackOverflowの上で見つけたものです:私はちょうど今、私がグーグルをスキップしてStackOverflowのにまっすぐに来たことを実現しています
- Scala: Workshop Advice
- More on generic Scala functions
- Scala: How to define "generic" function parameters?
。うーん。あなたがグーグルで正しいリンクを見つけたら、それを見るのが大好きです。私は、猿モナド、奇形などの用語を使用するGoogleのすべてのリンクを調べるために時間を使い果たしましたが、私をさらに混乱させ、これを試してみる可能性は低いです。
不思議...例はフラットアウト偽の特性の定義と矛盾します。 'X [A] .map'からの結果は、' 'X [B]であるべきであるが、' Range.map'は、実施例では、 ''ベクトル[INT]に評価なお、!これは、 'Range'の' map'が最初に型シグニチャを持たないために起こります。この例を完全に無視し、基本的なクラス定義から構築して新しい概念を説明する、@ retronymの答えを見てみることをお勧めします。 –
聖なるトンネル症候群!そう多くの答え。 Tysvm!あなたの指導のためにダニエルに感謝します。 – chaotic3quilibrium