¿Cómo se implementa la coincidencia de patrones en Scala a nivel de bytecode?
¿Es como una serie de if (x instanceof Foo)
construcciones, o algo más? ¿Cuáles son sus implicaciones de rendimiento?
Por ejemplo, dado el siguiente código (de Scala By Example, páginas 46-48), ¿cómo se vería el código Java equivalente para el eval
método?
abstract class Expr
case class Number(n: Int) extends Expr
case class Sum(e1: Expr, e2: Expr) extends Expr
def eval(e: Expr): Int = e match {
case Number(x) => x
case Sum(l, r) => eval(l) + eval(r)
}
PD: Puedo leer el código de bytes de Java, por lo que una representación de código de bytes sería lo suficientemente buena para mí, pero probablemente sería mejor para los otros lectores saber cómo se vería como código de Java.
PPS ¿El libro Programación en Scala da una respuesta a esta y otras preguntas similares sobre cómo se implementa Scala? He ordenado el libro, pero aún no ha llegado.