我正在玩依赖类型并遇到此错误:
some.scala:17: error: class B needs to be abstract, since value element in trait
Buffer of type B.this.T is not defined
使用此代码:
package types
object Demo {
trait Buffer {
type T
val element: T
}
abstract class Wee extends Buffer {
type T <: Integer
val s = element - 2
}
class B extends Wee {
}
}
有人可以解密什么值元素代表什么?
答案 0 :(得分:3)
第一个问题是你使用抽象类型的成员是没有可能的原因。它与你的错误没有直接关系,但是唉。
package types
object Demo {
trait Buffer[T] {
def element: T
}
abstract class Wee extends Buffer[Integer] {
def s: Integer = element - 2
}
现在好了,对于实际的失败,它非常明显和直截了当,你还没有提供element
的实现。您的Wee
班级extends Buffer
,因此任何具体的实施者都必须通过您的合同为element
提供实施。
trait
或abstract class
可以有抽象成员,普通class
则不能。 Ergo,kaboom,编译器告诉你让你的OOP达到最佳状态。
class B extends Wee {
val element = 5
}
或者更好:
class B(val element: Integer) extends Wee