trait Trait1
trait Trait2
object O {
type Type1 = Trait1
type Type2 = Trait1 with Trait2
trait TraitMember1 extends Type1
// this line fails to compile
trait TraitMember2 extends Type2
val anon1 = new Trait1 {}
val anon2 = new Type1 {}
val anon3 = new Trait1 with Trait2 {}
// this line fails as well
val anon4 = new Type2 {}
}
当您尝试编译上面的代码时,注释行会因错误class type required but Trait1 with Trait2 found
而失败。这是为什么?我可以手动混合复合成员中的所有特征并创建一个匿名类。
答案 0 :(得分:0)
在http://www.scala-lang.org/old/node/6817.html中,马丁解释道:
我同意它可能有用。它不太清楚它应该是什么意思, 虽然。展开所有别名,删除parens然后进行线性化?要么 父母是否影响线性化,如果,是的,如何?我们接过了 简单的出路并禁止这些成语。
虽然在规范和编译器中可以很好地解决这种复杂性,但当规范与用户的心智模型不一致时,最终结果可能会导致意外。