Я пробовал сопоставление с образцом на внутренней черте, но, похоже, это невозможно.Это также соответствует экземплярам внутренней черты из других объектов.Он соответствует только внутренним (абстрактным) классам.
Я не могу найти, почему внутренняя черта не может быть проверена во время выполнения.Какие-либо предложения?С помощью приведенного ниже кода я получаю это предупреждение для '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