0

I know about case classes, pattern matching, unapply and PartialFunction, but I'm confused about bellow macros snippet.

val declarations = weakTypeOf[T].declarations
val methods = declarations.collect { case m: MethodSymbol => m }

Scaladoc of MemberScope http://www.scala-lang.org/api/2.10.4/#scala.reflect.api.Scopes$MemberScope

Collect method accepts PartialFunction[Universe.Symbol, B] I can't find unapply method of MethodSymbol and it's also trait not a case class, so in witch code compiler transforms

{ case m: MethodSymbol => m }
sh1ng
  • 2,808
  • 4
  • 24
  • 38

1 Answers1

3

Because MethodSymbol is not a generic type, the match

case m: MethodSymbol => m

is essentially equivalent to

case m if m.isInstanceOf[MethodSymbol] => m

There is absolutely no magic here, and unapply machinery is not related to such matches at all. Same thing can easily be done even in Java.

Vladimir Matveev
  • 120,085
  • 34
  • 287
  • 296