Как в Scala работает сортировка по типу?
-
26-12-2019 - |
Вопрос
Я знаю о регистровых классах, сопоставлении с образцом, отмене применения и PartialFunction, но меня смущает приведенный ниже фрагмент макроса.
val declarations = weakTypeOf[T].declarations
val methods = declarations.collect { case m: MethodSymbol => m }
Скаладок MemberScopehttp://www.scala-lang.org/api/2.10.4/#scala.reflect.api.Scopes$MemberScope
Метод сбора принимает PartialFunction[Universe.Symbol, B]
я не могу найти unapply
метод MethodSymbol
и это также черта, а не класс случая, поэтому в компиляторе кода ведьмы преобразуется
{ case m: MethodSymbol => m }
Решение
Потому что MethodSymbol
не является универсальным типом, совпадение
case m: MethodSymbol => m
по сути эквивалентно
case m if m.isInstanceOf[MethodSymbol] => m
Здесь нет абсолютно никакого волшебства, и unapply
техника вообще не имеет отношения к таким матчам.То же самое можно легко сделать даже на Java.
Не связан с StackOverflow