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
を持つかわからないために発生します。しかし、私は自分の問題を解決する方法を見つけることができなかったので、どうすればこれを回避できるのだろうか.