Come funziona il caso per tipo a Scala?
-
26-12-2019 - |
Domanda
Conosco le classi del caso, il modello di abbinamento del modello, senzapplemente e la parte parziale, ma sono confuso sullo snippet di Macros.
val declarations = weakTypeOf[T].declarations
val methods = declarations.collect { case m: MethodSymbol => m }
.
Scaladoc di membri http://www.scala-lang.org/API / 2.10.4 / # scala.reflect.api.Scopes $ memberscope
Raccogli il metodo accetta PartialFunction[Universe.Symbol, B]
Non riesco a trovare il metodo unapply
di MethodSymbol
ed è anche il tratto non è una cassa del caso, quindi in Witch Code Compiler trasforma
{ case m: MethodSymbol => m }
. Soluzione
Poiché MethodSymbol
non è un tipo generico, la partita
case m: MethodSymbol => m
.
è essenzialmente equivalente a
case m if m.isInstanceOf[MethodSymbol] => m
.
Non c'è assolutamente nessuna magia qui, e i macchinari unapply
non sono correlati a tali partite.La stessa cosa può essere facilmente eseguita anche in Java.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow