加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读