假设我有一个特征,它的类型A
是 的子类,Any
并且调用的方法nextState
具有与参数相同的类型。
trait GameEnvironment {
type A <: Any
def nextState(state: A, input: Int): (A, Boolean)
}
然后这个 trait 被一个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
}
}
现在,如果我编译这段代码,我会得到一个错误
类型不匹配 state.type (与基础类型...
从我收集到的情况来看,这是因为编译器不确定是哪种类型state
。但是我似乎找不到如何解决我的问题,所以我想知道如何解决这个问题。