![](/img/trans.png)
[英]Scala type mismatch error even after checking type with isInstanceOf
[英]Checking structural type in scala by isInstanceOf
我只是在Scala中检查结构类型的相等性。
我立即从匿名类和Q
类型创建foo
实例。 我希望它们的方法名称有所不同,以便希望它们在结构上被视为不同的类型。
代码段:
scala> val foo = new {def foo=1}
a: AnyRef{def foo: Int} = $anon$1@3885c37f
scala> type Q = {def q:Unit}
defined type alias Q
scala> foo.isInstanceOf[Q]
<console>:14: warning: a pattern match on a refinement type is unchecked
foo.isInstanceOf[Q]
^
res55: Boolean = true
检查返回true。
Q1:我不明白为什么foo
是Q
的实例。 废话 它们的类型结构是否不同?
问题2:那么检查结构类型的正式方法是什么?
isInstanceOf
根据类信息。 您需要输入以下信息:
scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._
scala> val foo = new {def foo=1}
foo: AnyRef{def foo: Int} = $anon$1@15ab47
scala> type Q = {def q:Unit}
defined type alias Q
scala> def getType[T : TypeTag](t: T) = implicitly[TypeTag[T]].tpe
getType: [T](t: T)(implicit evidence$1:reflect.runtime.universe.TypeTag[T])reflect.runtime.universe.Type
scala> getType(foo) =:= typeOf[Q]
res9: Boolean = false
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.