我在scala
List.sum
sum[B >: A](implicit num: Numeric[B]): B
现在我明白它希望任何num
参数隐式转换为Numeric[B]
,这意味着typeclass
Numeric
然而我不明白的是如果实现块根本没有引用它,那么A
在那里做什么。
返回值为B
并且实施是
foldLeft(num.zero)(num.plus)
且num
也属于Numeric[B]
类型,因此如果返回值未引用A
且实现未引用A
,为什么需要它?
答案 0 :(得分:6)
它需要能够对列表的内容进行操作,这些内容是A
。因此,B
必须是A
的超类,这是B >: A
的含义。
(特别是,num.plus
必须接受A
个参数才能匹配fold
的签名。)