Scala 映射显式类型

Scala map explicit type

我是 Scala 和一般编程的新手。我在使用 Scala 映射函数时遇到问题。

map 函数的简单签名是:def map[B](f: (A) ⇒ B): List[B]

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

如果我尝试 运行 代码:

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

我收到错误消息 "expression of type int doesn't conform to expexted type B"

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

谢谢!

您问题中引用的 map() 签名是完整签名的 simplified/abbreviated 版本。

final def map[B, That](f: (A) ⇒ B)(implicit bf: CanBuildFrom[List[A], B, That]): That

因此,如果您想指定类型参数(几乎不需要),那么您必须同时指定两者。

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)

and i can explicit set the type of the result?

不是真的。类型参数必须与 f function/lambda returns 一致。如果您指定类型参数,那么您(通常)只是要求编译器确认结果类型实际上是您认为应该的类型。