首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 ><notype> -explaintypes:什么是“scalac <:X?”卑劣?

<notype> -explaintypes:什么是“scalac <:X?”卑劣?
EN

Stack Overflow用户
提问于 2011-08-14 17:52:59
回答 1查看 481关注 0票数 8

如果我运行"scalac -explaintypes“并看到如下内容:

代码语言:javascript
复制
Nothing <: ThingManager?
  <notype> <: ThingManager?
  false
true

“<:ThingManager”这行是什么?卑劣?

这是否意味着“任何类型都不可能符合ThingManager”?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-15 05:40:24

-explain-types跟踪对子类型检查的所有调用。缩进用于显示递归调用。

下面是一个小示例:

代码语言:javascript
复制
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

代码语言:javascript
复制
sym2.isClass && {
  val base = tr1 baseType sym2  // UniqueTypeRef(Int) baseType String => NoType
  (base ne tr1) && base <:< tr2
}

NoType是一个空对象。(对于NoSymbolNoPosition,编译器也使用此模式)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7056144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档