Pergunta

Eu sei sobre classes de casos, correspondência de padrões, unapply e PartialFunction, mas estou confuso sobre o trecho de macros abaixo.

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

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

O método de coleta aceita PartialFunction[Universe.Symbol, B]não consigo encontrar unapply método de MethodSymbol e também é uma característica que não é uma classe de caso, portanto, no qual o compilador de código se transforma

{ case m: MethodSymbol => m }
Foi útil?

Solução

Porque MethodSymbol não é um tipo genérico, a correspondência

case m: MethodSymbol => m

é essencialmente equivalente a

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

Não há absolutamente nenhuma mágica aqui, e unapply máquinas não estão relacionadas a tais jogos.A mesma coisa pode ser feita facilmente mesmo em Java.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top