特征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]
的String
是B
,但是minBy
的Int
是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/