此代码适用于:
scala> val x = ""
x: java.lang.String = ""
scala> Tuple2[x.type, x.type](x,x)
res5: (x.type, x.type) = ("","")这张没有:
scala> val y = 0
y: Int = 0
scala> Tuple2[y.type, y.type](y,y)
<console>:9: error: type mismatch;
found : y.type (with underlying type Int)
required: AnyRef
Note: an implicit exists from scala.Int => java.lang.Integer, but
methods inherited from Object are rendered ambiguous. This is to avoid
a blanket implicit which would convert any scala.Int to any AnyRef.
You may wish to use a type ascription: `x: java.lang.Integer`.
Tuple2[y.type, y.type](y,y)
^就像这个一样:
scala> val z = ()
z: Unit = ()
scala> Tuple2[z.type, z.type](z,z)
<console>:9: error: type mismatch;
found : z.type (with underlying type Unit)
required: AnyRef
Note: Unit is not implicitly converted to AnyRef. You can safely
pattern match `x: AnyRef` or cast `x.asInstanceOf[AnyRef]` to do so.
Tuple2[z.type, z.type](z,z)
^语言规范说
单例类型为p.type形式,其中p是指向预期符合scala.AnyRef (§6.1)的值的路径。
这背后的理由是什么,是否有必要像最近0.getClass那样取消这种限制?
发布于 2011-08-10 09:37:43
正如您在Scala类层次结构 Int上看到的那样,Unit、Boolean (和其他类)不是AnyRef的子类,因为它们被转换为java int、void、boolean等等,女巫不是Object的子类。
https://stackoverflow.com/questions/6682979
复制相似问题