Вопрос

Я знаю о регистровых классах, сопоставлении с образцом, отмене применения и 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top