【发布时间】:2018-10-24 17:03:06
【问题描述】:
假设我有一个类型为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
}
}
现在如果我编译这段代码我会得到一个错误
类型不匹配 state.type(与底层类型...
据我所知,这是因为编译器不确定state 的类型。但是我似乎找不到如何解决我的问题,所以我想知道如何解决这个问题。
【问题讨论】:
标签: scala generics types scala-generics type-members