【发布时间】:2015-11-20 03:48:26
【问题描述】:
我已经在 scala-user 论坛上发布了这个问题,
https://groups.google.com/forum/#!topic/scala-user/xlr7KmlWdWI
我收到了一个我很满意的答案。但是,与此同时,我想确定这是否是唯一的结论。谢谢
我的问题是,比如说,我有,
trait Combinable[A] {
def join[B](l: List[A]): B
}
例如,当我用 A 作为 String 和 B 作为 Int 来实现这个 trait 时,
class CombineString extends Combinable[String] {
override def join[Int](strings: List[String]) = string.size
}
显然,Int,在 join 方法旁边,不是 Scala 整数类,并且 编译此代码将失败。或者,我可以将我的特质重写为
trait Combinable[A, B] {
def join(l: List[A]): B
}
或
trait Combinable[A] {
def join[B](l: List[A])(f: List[A] => B): B
}
我的问题是,我怎样才能实现第一个示例中定义的特征?如果第一个例子因为它的定义方式没有实际用途,为什么编译器不抱怨呢?再次感谢。
【问题讨论】:
-
编译器不会抱怨,因为它不知道传递给 A 和 B 的内容。开发人员必须遵守纪律。
-
我明白,但从人类的角度来看(我和另一个回答的人)只有一个结果,抛出异常,编译器抛出警告是好的。除非有其他我不知道的结果
-
今天的编译器中没有“实际使用”这样的术语\实体