私は、コレクションとマップ関数の間のドットはオプションであると思っていましたが、それ以上の話があるようです。Scala:マップ関数の前に点が必要なのはいつですか?
scala> List(1,2,3) map (_*2)
res6: List[Int] = List(2, 4, 6)
scala> List(1,2,3).map (_*2)
res7: List[Int] = List(2, 4, 6)
これは失敗します:
これは、両方のフォーマットで動作
scala> articleFiles map (file => (file \\ "contentitem").map(a => (a \ "@id").text)).flatten
<console>:17: error: missing parameter type
articleFiles map (file => (file \\ "contentitem").map(a => (a \ "@id").text)).flatten
^
しかし、これは動作します:
scala> articleFiles.map (file => (file \\ "contentitem").map(a => (a \ "@id").text)).flatten
res7: scala.collection.immutable.Seq[String] = List(20761, 22798, 22799, 21167, 21438, 20770, 21480, 21906, 21907, 21923, 22766, 22771, 22794, 22800, 22803, 22804, 22818, 22819, 22820, 22821, 20456, 20771, 21337, 21542, 21590, 20768, 20775,
注意が、最後の2例との唯一の違いはありますドットをarticleFiles.map
これは、[セミコロン推論](http://stackoverflow.com/a/10313469/4496364)によって引き起こされていますが、flatten' 'を代わりにドットのスペースを使用することができ、それが動作するはずです。この構文は接尾辞表記と呼ばれ、[安全ではありません](http://docs.scala-lang.org/style/method-invocation.html)です。私はドット表記を使うほうが好きです。なぜなら、フローを読み込み、 'flatten'や' toList'などのメソッドを使う方が簡単だからです。 –
'.map'ではなく' .flatten'呼び出しで問題が発生します。 –
セミコロンの推論ここでは問題ではありません。どちらの場合も、必要に応じて、行末にセミコロンを付けます。 –