/ / Come funziona il caso per tipo in scala? - scala, riflessione, scala-macros, partialfunction, scala-compilatore

Come funziona il caso per tipo in scala? - scala, riflessione, scala-macros, partialfunction, scala-compilatore

Conosco classi di casi, pattern matching, unpply e PartialFunction, ma sono confuso riguardo al muggito dei frammenti di macro.

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

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

Il metodo di raccolta accetta PartialFunction[Universe.Symbol, B] Non riesco a trovare unapply metodo di MethodSymbol e non è nemmeno una class case, quindi nel trasformatore del codice stregato si trasforma

{ case m: MethodSymbol => m }

risposte:

3 per risposta № 1

Perché MethodSymbol non è un tipo generico, la partita

case m: MethodSymbol => m

è essenzialmente equivalente a

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

Non c'è assolutamente magia qui, e unapply le macchine non sono affatto collegate a tali incontri. La stessa cosa può essere fatta facilmente anche in Java.