在返回中使用参数实现traits时发现类型不匹配

时间:2013-06-28 05:09:55

标签: scala inheritance types type-mismatch traits

我有如下特点:

trait SomeBaseTrait{
  def someFun[B](args:SomeArgs)(f: => B):B
}

在我的测试课中,我试图按如下方式模拟这个类:

class MyMockOfBase extends SomeBaseTrait{
     def someFun[Boolean](args:SomeArgs)(f: => Boolean):Boolean = true
}

这里的问题是编译这个类会抛出以下内容:

[error]  found   : scala.Boolean(true)
[error]  required: Boolean
[error]   def someFun[Boolean](args:SomeArgs)(f: => Boolean):Boolean = true
[error]                                                                ^
[error] one error found

编辑。

此外,当我的特质有如下方法时,事情也有点奇怪:

 trait SomeBaseTrait2{
    def someFun2[B](args:SomeArgs):B
  }

我将其扩展如下:

val mockBase = new SomeBaseTrait2{def someFun2(args:SomeArgs):Boolean = true}

现在我在这里得到以下内容:

new SomeBaseTrait2{def someFun2(args:String):Boolean = true}
<console>:9: error: object creation impossible, since method someFun2 in trait SomeBaseTrait2 of type [B](args: String)B is not defined
              new SomeBaseTrait2{def someFun2(args:String):Boolean = true}

有人可以告诉我这里可能做错了吗?

1 个答案:

答案 0 :(得分:1)

在您的班级中MyMockOfBase Boolean是类型参数的名称,就像T一样:

class MyMockOfBase extends SomeBaseTrait{
     def someFun[T](args:SomeArgs)(f: => T):T= true
}

您正尝试将true用作T

我想你想做这样的事情:

trait SomeBaseTrait[B]{
  def someFun(args:SomeArgs)(f: => B):B
}

class MyMockOfBase extends SomeBaseTrait[Boolean]{
     def someFun(args:SomeArgs)(f: => Boolean):Boolean = true
}