我只是在 scala 中检查结构类型的相等性。
我立即从匿名类创建一个foo
实例和一个Q
类型。我打算将它们与方法名称不同,以便希望它们在结构上被视为不同的类型。
代码片段:
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
检查返回真。
Q1:
我不明白为什么foo
是Q
. 那是胡说八道。它们在类型结构的意义上不是不同的吗?
Q2: 那么检查结构类型的正式方法是什么?