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
......爲什麼結果不兼容?
這是一個編譯器錯誤,或者是有我缺少爲什麼這不應該工作的實際原因是什麼?
我同意演員似乎是一個非常糟糕的主意。此外,編譯器不會在沒有約束的情況下推斷單例類型。例如,「身份(foo)」不是'foo.type',除非是'object foo'。 –
其實'身份(富):foo.type'而不是'標識(名單(富).MAP(_ =>富)):列表[foo.type]'所以它是因爲'CanBuildFrom'推斷。 –