为什么Scala的Traversable有两种类型略有不同的copyToArray方法?

时间:2012-12-18 04:08:59

标签: scala scala-collections

我正在学习集合,我只是注意到Traversable docs中的这两种方法。第一个有什么意义?第二个似乎包括它。

copyToArray        (xs: Array[A], start: Int, len: Int): Unit
copyToArray[B >: A](xs: Array[B], start: Int, len: Int): Unit

2 个答案:

答案 0 :(得分:6)

你说第二个包含第一个是正确的。但是,第一个实际上并不存在。如果您仔细查看文档,就会看到单词[use case]

abstract def copyToArray(xs: Array[A], start: Int, len: Int): Unit
[use case] Copies elements of this collection to an array.

Scala API中的[use case]显示了签名的简化形式。这给了“典型”的使用方式,对于那些可能会被疯狂类型签名混淆的新Scala程序员来说并不那么可怕。

您在许多其他方法中看到了相同的内容,包括map(其中隐藏了CanBuildFrom内容):

abstract def map[B](f: (A) ⇒ B): CC[B]
[use case] Builds a new collection by applying a function to all elements of this collection.

def map[B, That](f: (A) ⇒ B)(implicit bf: CanBuildFrom[Traversable[A], B, That]): That
Builds a new collection by applying a function to all elements of this collection.

要阅读Martin Odersky讨论此问题的旧帖子,请参阅here

答案 1 :(得分:2)

这似乎是一个scaladoc神器。

$ scala29
Welcome to Scala version 2.9.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_22).
Type in expressions to have them evaluated.
Type :help for more information.

scala> val c = List(1,2,3)
c: List[Int] = List(1, 2, 3)

scala> c.copyToArray

def copyToArray[B >: A](xs: Array[B]): Unit                         
def copyToArray[B >: A](xs: Array[B], start: Int): Unit             
def copyToArray[B >: A](xs: Array[B], start: Int, len: Int): Unit  

This year's docs are much nicer.