特征Map[A,+B]
有一个方法
def minBy [B] (f: ((A, B)) ⇒ B)(implicit cmp: Ordering[B]): (A, B)
我期望特征的B
与方法中的特征相同,但我仍然无法理解这一点:
val m2 = Map('a -> "1", 'b ->"2" ,'c ->"3")
m2.minBy((t:(Symbol,String))=>Integer.parseInt(t._2))
此处B
的{{1}}为Map[A,+B]
,String
的{{1}}为B
- 或者我错了?
所以我希望方法的类型相当
minBy
但这不是消息来源所说的。
如果两者截然不同,我应该知道哪里? 如果他们不是 - 你能发现并指出我的错误吗?
答案 0 :(得分:7)
构建文档的软件似乎无法从特征的B
定义重命名minBy
变量,从而导致名称冲突。你的分析似乎是对的。
要使用lambda演算中的术语,我会说该软件未能alpha-convert。
答案 1 :(得分:6)
您的分析是正确的,应该将其重命名为C或其他内容。问题是scaladoc只是用一个元组(A,B)替换TraversableLike定义中的A,因为它是一个映射。这是TraversableLike的定义:
def minBy [B] (f: (A) ⇒ B)(implicit cmp: Ordering[B]): A
因为它是一张地图,scaladoc用元组(A,B)替换(A)。
def minBy [B] (f: (A, B) ⇒ B)(implicit cmp: Ordering[B]): (A, B)
如你所见,实际上并不是正确的签名。
这是一个已知问题,scaladoc does not disambiguate between same-named type parameters。投票或提交补丁!