Knu*_*daa 1 scala scala-collections
根据Map对象上map方法的scaladoc,它应该返回一个新的Map:
def map [B] (f: ((A, B)) ? B) : Map[B]
Run Code Online (Sandbox Code Playgroud)
"返回一个新的地图,该地图是将给定的函数f应用于此地图的每个元素并收集结果."
但它没有:
scala> val countries = Map("NO" -> "Norway", "US" -> "United States", "DE" -> "Germany")
countries: scala.collection.immutable.Map[java.lang.String,java.lang.String] = Map((NO,Norway), (US,United States), (DE,Germany))
countries map { _._1 }
res4: scala.collection.immutable.Iterable[java.lang.String] = List(NO, US, DE)
Run Code Online (Sandbox Code Playgroud)
但是,这种行为是我所期望的.那么文档是错误的,还是我错过了什么?
小智 5
您正在阅读错误的地图功能.
def map [B](f:((A,B))⇒B):地图[B]
但你正在使用:
def map [B,That](f :((A,B))⇒B)(隐式bf:CanBuildFrom [Map [A,B],B,That]):那个
因为你要返回一个字符串,所以你不是使用拳头而是第二个.为此,ScalaDoc说:
"通过将给定函数f应用于此映射的每个元素并收集结果而产生的新类型集合."
@usecaseScaladoc 的加入是相当匆忙构思和实现的,并且有一些皱纹.在这种情况下,用例在Scaladoc中定义TraversableLike#map:
@usecase def map[B](f: A => B): $Coll[B]
Run Code Online (Sandbox Code Playgroud)
$Coll用简单的文本替换替换,使用中定义的值scala.collection.Map.
/**
* @define Coll Map
* @define coll map
*/
object Map extends MapFactory[Map]
Run Code Online (Sandbox Code Playgroud)
可以做些什么呢?也许文本替换的结果可以进行类型检查,这将排除这些边缘情况.
| 归档时间: |
|
| 查看次数: |
638 次 |
| 最近记录: |