Scala API中有很多地方,特别是在集合中,方法签名错误。
例如,Map。flatMap
的scaladoc签名表示
def flatMap[B](f: (A) ⇒ GenTraversableOnce[B]): Map[B]
但实际的签名是
flatMap[B, That](f: ((A, B)) ⇒ GenTraversableOnce[B])
(implicit bf: CanBuildFrom[Map[A, B], B, That]): That
这一点特别没有意义,因为scaladoc签名包含Map[B]
,但Map
有两个类型参数,而不是一个。
这里发生了什么?这是一个错误吗?
答案 0 :(得分:13)
您在生成的文档中看到的错误签名被称为"用例"。他们应该通过展示理想化的API来澄清文档,类似于真实的API,但省略了繁琐的细节(如普遍的隐式CanBuildFrom
参数bothers some people)。
对于使用用例的方法,您可以通过单击方法名称来显示该方法的详细信息,然后单击"完全签名"展开另一个显示签名的部分。
Scala issue SI-3448专门处理为Map
显示的错误数量的类型参数。此问题已关闭"赢得了修复"在2012年7月。
Paul Phillips'从2014年1月开始,Scala Collections: Why Not?会将用例视为"谎言"在slide 1,slide 2,slide 3。
在GenTraversableLike.scala中,您可以看到一个导致生成用例文档的指令示例:
@usecase def flatMap[B](f: A => TraversableOnce[B]): $Coll[B]