Scala 如何解释Map.Map结果

Scala 如何解释Map.Map结果,scala,collections,Scala,Collections,当我查看Map.Mapscaladoc时,我可以看到 map[B](f: (A) ⇒ B): Map[B] 但是下面的简单代码不会返回Map scala> Map("answer" -> 42).map { case(k, v) => v } res40: scala.collection.immutable.Iterable[Int] = List(42) 你能解释一下吗?Scaladocs是简化的,如果你想看到完整的签名,你必须展开并单击show full signat

当我查看
Map.Map
scaladoc时,我可以看到

map[B](f: (A) ⇒ B): Map[B]
但是下面的简单代码不会返回
Map

scala> Map("answer" -> 42).map { case(k, v) => v }
res40: scala.collection.immutable.Iterable[Int] = List(42)

你能解释一下吗?

Scaladocs是简化的,如果你想看到完整的签名,你必须展开并单击show full signature,你会看到真正的签名是这样的:

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

它允许返回一个
,该
可以是
映射
,也可以是
列表

简单的答案是,您需要键值对来构建映射

scala> Map("answer" -> 42).map { case(k, v) => (k, 43) }
res6: scala.collection.immutable.Map[String,Int] = Map(answer -> 43)

什么是
的“
”?一个快速的谷歌没有透露任何信息(可能是因为“那”这个词太常见了)。它是
列表的显式超类型还是
映射的显式超类型?还是某种一般的抽象?如果我在scaladoc中看到
,我能推断出关于类型的什么呢?不要被这个词弄糊涂了,
这里是一个类型参数,它可以被命名为
t
,或者
FVG
或者watherver,在这里它只是表示
映射的返回类型。为了制作一个更简单的示例
defsomemethod[T](value:T):T=value
,这里您可以说这个方法返回一个
T
,因为
T
是签名中指定的返回类型,如果我想:
defsomemethod[that](value:that):that=value
Gotcha,但是在这种情况下,
实际上是什么类型的呢?我没有立即看到任何边界定义了哪些类型可以是
。换句话说,
That
与这里的
AnyRef
有何不同?虽然unconstraint中的类型有一个隐式的
CanBuildFrom
用于指定是否可以从另一个类型生成类型,但第一个类型参数是from部分(在这种情况下,我们映射的是a
Map[a,B]
第三个参数是我们想要得到的集合(在这个问题中,方法是
That
,特别是它是一个
列表
)。更详细地解释了
CanBuildFrom
,反正在这个问题上有很多资源。“简化”这意味着一种保持某种正确性的转换。scaladoc并没有被简化;它们只是错了。
Map[B]
甚至不能是一种类型。这毫无意义。看到了吗?有人有关于scaladoc用例是如何存在的@extempore幻灯片的链接吗?@som snytt@GabrielePetronella“这是在恶毒小说部分”是我参加的一个,非常好的剧场。此外,保罗向我们展示圣诞结束后圣诞老人的精灵们穿什么。