¿Cómo funciona el caso por tipo en Scala?
-
26-12-2019 - |
Pregunta
Sé que sobre las clases de casos, la coincidencia de patrones, la coincidencia de patrones, sin apariencia y la función parcial, pero estoy confundido con el fragmento de macros.
val declarations = weakTypeOf[T].declarations
val methods = declarations.collect { case m: MethodSymbol => m }
ScalAdoc de MemberScope http://www.scala-lang.org/API / 2.10.4 / # Scala.Reflect.api.scopes $ MemberScope
método de recopilación acepta PartialFunction[Universe.Symbol, B]
No puedo encontrar el método unapply
de MethodSymbol
y también es rasgo, no es una clase de casos, por lo que en el compilador de código de brujas transforma
{ case m: MethodSymbol => m }
Solución
Porque GeneracDicetAnDode no es un tipo genérico, la coincidencia
case m: MethodSymbol => m
es esencialmente equivalente a
case m if m.isInstanceOf[MethodSymbol] => m
No hay absolutamente ninguna magia aquí, y la maquinaria MethodSymbol
no está relacionada con tales coincidencias en absoluto.Lo mismo se puede hacer fácilmente incluso en Java.