scalac -explaintypes:“<:X?”是什么意思?
发布时间:2020-12-16 08:52:22 所属栏目:安全 来源:网络整理
导读:如果我运行“ scalac -explaintypes”并看到如下内容: Nothing : ThingManager? notype : ThingManager? falsetrue “ notype:ThingManager?”这一行是什么?意思? 这是否意味着“没有类型可能符合ThingManager”? 解决方法 -explain-types跟踪所有对子
如果我运行“
scalac -explaintypes”并看到如下内容:
Nothing <: ThingManager? <notype> <: ThingManager? false true “< notype><:ThingManager?”这一行是什么?意思? 这是否意味着“没有类型可能符合ThingManager”? 解决方法
-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(字符串). LHS是字面整数的单例类型.检查继续considering该单例类型的基础类型UniqueTypeRef(Int)<:< UniqueTypeRef(字符串). 一致性检查然后searches为类String的超类型(base type),然后检查它是否符合String.没有这样的超类型,因此返回NoType.对<:<的递归调用导致输出< notype> <:java.lang.String. sym2.isClass && { val base = tr1 baseType sym2 // UniqueTypeRef(Int) baseType String => NoType (base ne tr1) && base <:< tr2 } NoType是Null对象. (编译器也将此模式用于NoSymbol,NoPosition). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |