¿Cómo se implementa la coincidencia de patrones en Scala en el nivel de bytecode?¿Cómo se implementa la coincidencia de patrones en Scala en el nivel de bytecode?
¿Es como una serie de construcciones if (x instanceof Foo)
, o algo más? ¿Cuáles son sus implicaciones de rendimiento?
Por ejemplo, dado el siguiente código (desde Scala By Example páginas 46-48), ¿cómo sería el código equivalente de Java para el método eval
?
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)
}
P.S. Puedo leer el bytecode de Java, por lo que una representación de bytecode 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 Java.
P.P.S. ¿Responde el libro Programming in Scala a esta y otras preguntas similares sobre cómo se implementa Scala? He ordenado el libro, pero aún no ha llegado.
¿Por qué no compila el ejemplo y lo desmonta con un desensamblador de código de Java? – Zifre
Probablemente lo haga, a menos que alguien dé una buena respuesta primero. Pero ahora quiero dormir un poco. ;) –
¡La pregunta es útil para otros lectores! – djondal