尽管这可以按预期工作:
trait A
trait B extends A
object C extends A with B
以下产生
illegal cyclic reference involving trait B
:package cyclictest {
trait A
trait B extends A
}
package object cyclictest extends A with B
那里发生了什么?
最佳答案
错误是正确的。编译器将名称A
和B
解析为完全限定的名称,因此typechecker看到的是:
package object cyclictest extends cyclictest.A with cyclictest.B
为了检查包对象定义是否正确,编译器需要知道
A
和B
的所有成员,但是为了知道,它需要知道cyclictest
的成员(因为A
和B
是cyclictest
的成员) 。但是,这是在定义循环测试时发生的,因此您有一个无法解决的循环。第一种情况通过是因为软件包
cyclictest
不继承任何东西,它是默认的基于目录的软件包。关于scala - 将特征混入包装对象两次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7728194/