如果您使用-Xprint:typer
标记运行SBT或REPL,并为其提供基本内容,例如object trees
或class trees
,则可能会获得此输出:
package <empty> {
class trees extends scala.AnyRef {
def <init>(): trees = {
trees.super.<init>();
()
}
}
}
如果object
返回类型为trees.type
,但有趣的是结果的类型,Unit
为()
,即:< / p>
def <init>(): trees = { // <- expect type trees
trees.super.<init>();
() // <- Should be of type Unit
}
显然,如果它是由编译器本身生成并且正常工作,那么它为什么以及如何工作呢?