Como funciona o caso por tipo no scala?
-
26-12-2019 - |
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 }
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