特征Map[A,+B]有一个方法

def minBy [B] (f: ((A, B)) ⇒ B)(implicit cmp: Ordering[B]): (A, B)

我希望特征的B与方法中的B相同,但是我仍然无法理解这一点:
val m2 = Map('a -> "1", 'b ->"2" ,'c ->"3")
m2.minBy((t:(Symbol,String))=>Integer.parseInt(t._2))

在这里,Map[A,+B]StringB,但是minByInt是ojit_code-还是错误我?

所以我希望该方法的类型是
def minBy [C] (f: ((A, B)) ⇒ C)(implicit cmp: Ordering[C]): (A, B)

但这不是消息人士所说的。

如果两者都不同,我应该在哪里知道?
如果不是,那么您能发现并指出我的错误吗?

最佳答案

您的分析是正确的,应将其重命名为C或其他名称。问题在于,scaladoc只是将TraversableLike中定义中的A替换为元组(A,B),因为它是一个映射。这是TraversableLike的定义:

def minBy [B] (f: (A) ⇒ B)(implicit cmp: Ordering[B]): A

因为它是一张 map ,所以scaladoc将(A)替换为元组(A,B)。
def minBy [B] (f: (A, B) ⇒ B)(implicit cmp: Ordering[B]): (A, B)

如您所见,它实际上不是正确的签名。

这是一个已知问题scaladoc does not disambiguate between same-named type parameters。投票或提交补丁!

关于scala - minBy [B](f : ((A, B)的类型参数⇒B)(隐式cmp : Ordering[B]): (A, B),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8397684/

10-10 21:50