无法在运行时检查内部特征的模式匹配?

时间:2018-11-20 08:28:39

标签: scala pattern-matching

我尝试对内在特征进行模式匹配,但是看起来无法完成。它还匹配来自其他对象的内部特征实例。它仅匹配内部(抽象)类。

我找不到为什么无法在运行时检查内部特征的原因。有什么建议么? 在下面的代码中,我收到“ 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

0 个答案:

没有答案