Scala映射显式类型

Sen*_*nua 4 generics scala higher-order-functions

我是Scala的新手和一般的编程..我有Scala地图功能的麻烦..

映射函数的简单签名是:DEF映射[B](F:(A)⇒B):列表[B]

所以我猜地图[B]的B是通用的,我可以显式设置结果的类型吗?

如果我尝试运行代码:

 val donuts1: Seq[Int] = Seq(1,2,3)
 val donuts2: List[Int] = {
    donuts1.map[Int](_ => 1)
  }
Run Code Online (Sandbox Code Playgroud)

我收到错误消息"int类型的表达式不符合exxted类型B"

我不明白这里的问题..有人能解释一下这个问题吗?

谢谢!

jwv*_*wvh 5

map()您问题中引用的签名是完整签名的简化/缩写版本.

final def map[B, That](f: (A) ? B)(implicit bf: CanBuildFrom[List[A], B, That]): That
Run Code Online (Sandbox Code Playgroud)

因此,如果要指定类型参数(几乎不需要),则必须同时指定两者.

val donuts1: List[Int] = List(1,2,3)
val donuts2: List[Int] = donuts1.map[Int,List[Int]](_ => 1)
//donuts2: List[Int] = List(1, 1, 1)
Run Code Online (Sandbox Code Playgroud)

我可以明确设置结果的类型?

并不是的.type参数必须与f函数/ lambda返回的内容一致.如果你指定了type参数,那么你(通常)只是要求编译器确认结果类型实际上是你认为它应该是什么.