假设我有一个 A
类型的特征,它是 Any
的子类,还有一个名为 nextState
的方法,它与参数具有相同的类型 .
trait GameEnvironment {
type A <: Any
def nextState(state: A, input: Int): (A, Boolean)
}
然后通过名为 Tetris
的类扩展此特征,该类将覆盖类型成员 A
和方法 nextState
.
class Tetris extends GameEnvironment {
override type A = ((Array[Array[Int]]), Int)
def nextState(state: (Array[Array[Int]], Int), input: Int):
((Array[Array[Int]], Int), Boolean) = {
((state, false))
}
}
现在在另一个名为 ReinLib
的类中,我创建了一个 GameEnvironment
,并且我还有一个接受参数 GameEnvironment#A
的函数 .
class ReinLib(val mode: String) {
val env : GameEnvironment = new Tetris()
def simulateStep(state: GameEnvironment#A, input: Int): (Boolean) =
{
env.nextState(state, input)._2
}
}
现在,如果我编译此代码,我会收到错误
type mismatch state.type(带底层类型......
从我收集到的这种情况发生,因为编译器不确定 state
具有哪种类型 . 但是我似乎无法找到如何解决我的问题,所以我想知道如何解决这个问题 .
1 回答
类型
GameEnvironment#A
太模糊了,它基本上与env
中使用的状态类型完全无关 .你可能想要这样的东西:
它编译成功,因为现在
env.nextState
可以接受state: env.A
作为参数 .