我尝试了内部特征上的模式匹配,但看起来这样做无法完成 . 它还匹配来自其他对象的内部特征实例 . 它只匹配内部(抽象)类 .

我无法找到为什么在运行时无法检查内部特征 . 有什么建议?使用下面的代码,我得到'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