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'推断。 –