小编TNW*_*TNW的帖子

flatMap(func)与flatMap(func(_))

由于无法找到该问题的现有问题,我感到非常惊讶.为什么这样,给出:

val p: Int => Option[Int] = Some(_)
List(1, 2, 3).flatMap(p)
Run Code Online (Sandbox Code Playgroud)

我越来越:

<console>:14: error: type mismatch;
 found   : Int => Option[Int]
 required: Int => scala.collection.GenTraversableOnce[?]
       List(1, 2, 3).flatMap(p)
Run Code Online (Sandbox Code Playgroud)

但是如果我用这个替换最后一行,它会按预期编译并工作:

List(1, 2, 3).flatMap(p(_))
Run Code Online (Sandbox Code Playgroud)

我对这个问题的看法是,在p(_)类型推理系统的情况下,决定lambda的类型,以及它找到适当的隐式转换的方式Option[Int](option2Iterable我相信).只是p,类型已知,并且它是不正确的,因此不会尝试转换(并且没有转换Function1返回OptionFunction1返回GenTraversableOnce).

这个推理是对的吗?如果是这样,有什么理由我不应该将此报告为错误/问题?

编辑:一个新的转折:我已经看到p.apply在一些(遗憾的)删除的评论中提到(虽然这是关于编码风格).令人惊讶的是,它的效果一样好p(_).

scala

13
推荐指数
1
解决办法
269
查看次数

标签 统计

scala ×1