def と同等の関数を val として宣言しましょう。
scala> def optional(x:Int):Option[String] = None
optional: (x: Int)Option[String]
scala> val optional2:(Int)=>Option[String] = (i:Int) => None
optional2: Int => Option[String] = <function1>
なぜこれがうまくいかないのでしょうか?
scala> List(1).flatMap(optional2)
<console>:9: error: type mismatch;
found : Int => Option[String]
required: Int => scala.collection.GenTraversableOnce[?]
List(1).flatMap(optional2)
^
これらの両方が行う間?
scala> List(1).flatMap(optional)
res4: List[String] = List()
scala> List(1).flatMap(optional2(_))
res5: List[String] = List()
Option は GenTraversableOnce のサブタイプではないため、これは Implicit と関係があるに違いないと思いますが、それが正確に何であるかはわかりません。Scala 2.9.1 を使用しています。