scaladoc在地图上地图
按照scaladoc为地图对象在地图上的方法,则它应该返回一个新的地图:scaladoc在地图上地图
def map [B] (f: ((A, B)) ⇒ B) : Map[B]
“返回从施加给定的函数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)
这种行为是我所期望的,但。那么文档是错误的,还是我错过了一些东西?
您正在阅读错误的地图功能。
DEF映射[B](F:((A,B))⇒B):地图[B]
但使用的是:
DEF映射[B,即(F: ((A,B))⇒B)(隐式bf:CanBuildFrom [Map [A,B],B,That]):
由于您正在返回一个字符串,您不会使用拳头,对于它ScalaDoc说:
“一个新的集合的类型,由于将给定的函数f应用于此地图的每个元素并收集结果。”
这是有道理的。但是我认为文档在这一点上可能会更清晰,因为用于简化对这些复杂方法签名的理解的“用例”实际上使得它更容易混淆。结果虽然很直观,但可能是最重要的。 – 2010-09-28 12:26:34
它们都是相同的功能。正如反义词所指出的那样,更简单的是@usecase。 – 2010-09-28 18:35:24
除了Scaladoc之外,@usecase
相当仓促的构想和实施,并且有一些皱纹。在这种情况下,用例在Scaladoc定义TraversableLike#map
:
@usecase def map[B](f: A => B): $Coll[B]
$Coll
被替换为简单的文本替换,使用scala.collection.Map
定义的值。
/**
* @define Coll Map
* @define coll map
*/
object Map extends MapFactory[Map]
对此可以做些什么?也许文本替换的结果可能是类型检查,这将排除这些边缘情况。
您在文档中的哪个位置找到了它?这里(http://www.scala-lang.org/api/current/scala/collection/mutable/Map.html)有点不同。也许这是Scala版本之间的区别。 – amorfis 2010-09-28 11:22:18
http://www.scala-lang.org/api/current/scala/collection/Map.html – 2010-09-28 11:30:56