2
シミュレーションの状態の特性を定義するこのスニペットを検討してください。このスニペットは、ユーザーがいくつかの派生型で実装することが期待されています。この特性上、ユーティリティメソッドのコレクションは、Scalaライブラリコレクションがこれを行うのと同様に、実装の型を持つ結果を提供できるはずです。それを達成するために、私はこのように、私は実装タイプと特性をパラメータ化する必要があると思う:Scala:foldLeftの型パラメータへのキャストを避ける
def update(steps: Int) : This
:
trait State[+This <: State[This]] {
def update : This // result has type of State's implementor
}
今、私はこのような多段階の更新方法を定義したいと思います
:def update(steps: Int) : This =
(this /: (0 until steps))((s,n) => s.update)
コンパイラは型の不一致文句を言う:私は単純なアプローチをしようとすると
this
は状態内に見られるので、意味があります。状態は[This]です。この明示的なキャスト、またはより一般的には良い方法で意図した結果を達成するために回避する方法はあります
def update(steps: Int) : This =
(this.asInstanceOf[This] /: (0 until steps))((s,n) => s.update)
: は、コードをコンパイルするために取得するには、私が明示的なキャストをしなければならないようですか?ありがとう。
あなたがState
が
This
であることを保証するために、自己型注釈を追加する必要が
ナイス!ありがとうございました! –