我尝试对内在特征进行模式匹配,但是看起来无法完成。它还匹配来自其他对象的内部特征实例。它仅匹配内部(抽象)类。
我找不到为什么无法在运行时检查内部特征的原因。有什么建议么? 在下面的代码中,我收到“ 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