Scala:类型与 (Any*) => 单位不匹配



我有一个抽象方法

def updateState: (Any*) => Unit

我试图通过以下方式覆盖儿童课程:

override def updateState = (sharedOptimizer: Vector[Double],
                            sharedMeanGradient: Vector[Double],
                            sharedHistoricalGradients: Array[Vector[Double]]) => {
    ()
}

我不明白为什么编译器会返回我这个错误:

Error:(75, 81) type mismatch;
 found   : (Vector[Double], Vector[Double], Array[Vector[Double]]) => Unit
 required: Any* => Unit

Any*类型是否应该表示"任何类型的任何参数"?

类型Any*只是一种普通类型,就像IntList[String]一样。就像您不能覆盖方法

def foo(x: List[String]): Unit

def foo(x: Int): Unit

您也不能覆盖

def updateState: (Any*) => Unit

def updateState:
 (Vector[Double], Vector[Double], Array[Vector[Double]]) => Unit

因为 (Vec[D], Vec[D], Arr[Vec[D]])不是Any*的超级类型,即可以将很多东西作为Any*传递给(Vec[D], Vec[D], Arr[Vec[D]])

如果您不想立即进行编码状态类型,请通过它参数化您的类:

trait Foo[S] {
  def updateState: S => Unit
}

或将其变成类型的成员:

trait Foo {
  type State
  def updateState: State => Unit
}

然后您可以在子类中覆盖它:

object Bar extends Foo[Int] {
  override def updateState: Int => Unit = 
    x => println("State is now " + x)
}

object Bar extends Foo {
  type State = Int
  override def updateState: Int => Unit = ???
}

取决于您选择的选项。

相关内容

  • 没有找到相关文章

最新更新