Допустим, у меня есть черта с типом 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
имеет. Однако я не могу найти решение своей проблемы, поэтому яинтересно, как можно обойти это.