Совпадение с образцом на внутренней черте не может быть проверено во время выполнения? - PullRequest
0 голосов
/ 20 ноября 2018

Я пробовал сопоставление с образцом на внутренней черте, но, похоже, это невозможно.Это также соответствует экземплярам внутренней черты из других объектов.Он соответствует только внутренним (абстрактным) классам.

Я не могу найти, почему внутренняя черта не может быть проверена во время выполнения.Какие-либо предложения?С помощью приведенного ниже кода я получаю это предупреждение для '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.орг / gj2Tb6QaShiNNeRMMliwsQ

...