如何修复此代码:
trait A[A,B]{
def f(a:A):B
}
trait B[A,B]{
def g(a:A):B
}
type C = A[String,Int] with B[String,Double]
//works fine
new A[String,Int] with B[String,Double] {
def f(a:String):Int = 1
def g(a:String):Double = 2.0
}
//error
new C {
def f(a:String):Int = 1
def g(a:String):Double = 2.0
}
我得到的例外是:
Error:(41, 6) class type required but A$A42.this.A[String,Int] with A$A42.this.B[String,Double] found
new C {
^
任何想法如何解决这个问题,原因是什么?
答案 0 :(得分:2)
我的猜测为什么它不起作用(可能不应该):type C = ...
定义了一个不是类类型的东西,我想知道它是什么。但是当您将其传递给new
时,它会预期new class_type with trait_type ...
,因此您只想替换一件事,即class_type
和C
。如果您定义C
而没有with
则可以使用。
你也可以写:
type C1 = A[String,Int]
type C2 = B[String,Double]
new C1 with C2 {
def f(a:String):Int = 1
def g(a:String):Double = 2.0
}