gpt4 book ai didi

scala - 为什么 scaladoc 说 HashMap.toArray 返回 Array[A] 而不是 Array[(A,B)]?

转载 作者:行者123 更新时间:2023-12-04 17:50:37 25 4
gpt4 key购买 nike

我在看 toArray 的定义对于哈希图:

http://www.scala-lang.org/api/current/index.html#scala.collection.immutable.HashMap

它有

toArray: Array[A]
def toArray[B >: (A, B)](implicit arg0: ClassTag[B]): Array[B]

我不太明白这一点——第一部分说你得到了一个 Array[A],但第二部分说你得到了 Array[B]?这些都不是我所期望的 - Array[(A,B)]

当我自己检查时:
scala> val x = scala.collection.mutable.HashMap[String, Int]()
x: scala.collection.mutable.HashMap[String,Int] = Map()

scala> x.put("8", 7)
res0: Option[Int] = None

scala> x foreach println
(8,7)

scala> x.toArray
res2: Array[(String, Int)] = Array((8,7))

为什么不像 toList?
toList: scala.List[(A, B)]

最佳答案

scaladoc 有各种微妙的错误。这里的问题是您看到的是方法签名的“简化”版本(旨在传达签名的重要部分并隐藏诸如 CanBuildFrom/map 方法中的 flatMap 之类的东西,它们是真的是一个实现细节)。
这里的简化有点错误,似乎没有多大意义。
如果您单击“完整签名”链接,您将看到真正的签名如下所示:

def toArray[B >: (A, B)](implicit arg0: ClassTag[B]): Array[B]

事实上,这仍然是错误的,因为我们当然不能有 B >: (A, B) 的类型 B。它应该更像是:
def toArray[C >: (A, B)](implicit arg0: ClassTag[C]): Array[C]

问题是实际上有两个 B s:第一个来自 HashMap类声明本身( HashMap[A, +B] )而另一个来自方法 toArray在其基类中定义 TraversableOnce ( def toArray[B >: A](implicit arg0: ClassTag[B]): Array[B] )。碰巧的是,scaladoc 生成器未能删除 B 的两个实例。

关于scala - 为什么 scaladoc 说 HashMap.toArray 返回 Array[A] 而不是 Array[(A,B)]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17277985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com