class Foo {
def copy: this.type = new Foo().asInstanceOf[this.type]
def multiply(n: Int): Seq[this.type] = (0 until n).map(_ => copy)
}
このコードのようなエラーでコンパイルに失敗します。私はこれについての説明を考えることはできません`this.type`:なぜこれはコンパイルされませんか?
<console>:33: error: type mismatch;
found : scala.collection.immutable.IndexedSeq[Foo]
required: Seq[Foo.this.type]
:結果がでない理由copy
戻りthis.type
、 multiply
はちょうど... .copy
を呼び出します互換性がある?
これはコンパイラのバグですか、実際にはこれが機能しない理由が分かりません。
キャストは本当に悪い考えのように思えます。また、コンパイラは、制約のないシングルトンタイプを推測することを好まない。 'Identity(foo)'は 'foo.type'ではなく' foo'です。たとえば、 'object foo'以外のものです。 –
実際に 'identity(foo):foo.type'ではなく' identity(List(foo).map(_ => foo)):List [foo.type] 'なので、' CanBuildFrom'の推論のためです。 –