如果我运行"scalac -explaintypes“并看到如下内容:
Nothing <: ThingManager?
<notype> <: ThingManager?
false
true“<:ThingManager”这行是什么?卑劣?
这是否意味着“任何类型都不可能符合ThingManager”?
发布于 2011-08-15 05:40:24
-explain-types跟踪对子类型检查的所有调用。缩进用于显示递归调用。
下面是一个小示例:
scala210 -explaintypes -e '0 : java.lang.String'
scalacmd9062993631372828655.scala:1: error: type mismatch;
found : Int(0)
required: java.lang.String
0 : java.lang.String
^
one error found
Int(0) <: java.lang.String?
Int <: java.lang.String?
<notype> <: java.lang.String?
false
false
false有三个级别的递归。第一个调用是检查UniqueConstantType(0) <:< UniqueTypeRef(String)。LHS是文字整数的单例类型。检查通过considering该单例类型UniqueTypeRef(Int) <:< UniqueTypeRef(String)的底层类型来继续。
一致性检查然后对类String ( base type)的Int的超类型执行searches,然后检查它是否符合String。没有这样的超类型,所以返回NoType。对<:<的递归调用导致输出<notype> <: java.lang.String。
sym2.isClass && {
val base = tr1 baseType sym2 // UniqueTypeRef(Int) baseType String => NoType
(base ne tr1) && base <:< tr2
}NoType是一个空对象。(对于NoSymbol、NoPosition,编译器也使用此模式)。
https://stackoverflow.com/questions/7056144
复制相似问题