我有一个抽象方法
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*
只是一种普通类型,就像Int
或List[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 = ???
}
取决于您选择的选项。