我尝试了内部特征上的模式匹配,但看起来这样做无法完成 . 它还匹配来自其他对象的内部特征实例 . 它只匹配内部(抽象)类 .
我无法找到为什么在运行时无法检查内部特征 . 有什么建议?使用下面的代码,我得到'def patternMatchA1'的警告:'在运行时无法检查此类型测试中的外部引用 .
trait A0
case class X() {
trait A1 extends A0
case class A() extends A1
def patternMatchA1(a: A0) = a match {
case a: A1 => true //The outer reference in this type test cannot be checked at run time.
case _ => false
}
def patternMatchA(a: A0) = a match {
case a: A => true
case _ => false
}
}
val Xa = X()
val Xb = X()
Xa.patternMatchA1(Xa.A()) //true
Xa.patternMatchA1(Xb.A()) //true -> I expected this to be false
Xa.patternMatchA(Xa.A()) //true
Xa.patternMatchA(Xb.A()) //false
scastie:https://scastie.scala-lang.org/gj2Tb6QaShiNNeRMMliwsQ