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

Rob*_*b N 2 scala scala-collections

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

copyToArray        (xs: Array[A], start: Int, len: Int): Unit
copyToArray[B >: A](xs: Array[B], start: Int, len: Int): Unit
Run Code Online (Sandbox Code Playgroud)

dhg*_*dhg 6

你是正确的,第二个包含第一个.但是,第一个实际上并不存在.如果您仔细查看文档,您会看到以下文字[use case]:

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

[use case]Scala API中的A 显示了签名的简化形式.这给了"典型"的使用方式,这对新的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.
Run Code Online (Sandbox Code Playgroud)

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