Scala从多个通用特征定义类型

时间:2015-10-29 16:32:39

标签: scala

如何修复此代码:

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 {
    ^

任何想法如何解决这个问题,原因是什么?

1 个答案:

答案 0 :(得分:2)

我的猜测为什么它不起作用(可能不应该):type C = ...定义了一个不是类类型的东西,我想知道它是什么。但是当您将其传递给new时,它会预期new class_type with trait_type ...,因此您只想替换一件事,即class_typeC。如果您定义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
}