Come viene implementato il pattern matching in Scala a livello di bytecode?
È come una serie di if (x instanceof Foo)
costrutti o qualcos'altro? Quali sono le sue implicazioni sulle prestazioni?
Ad esempio, dato il codice seguente (dalle pagine 46-48 di Scala By Example ), come sarebbe il codice Java equivalente per il eval
metodo?
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)
}
PS Posso leggere il bytecode Java, quindi una rappresentazione del bytecode sarebbe abbastanza buona per me, ma probabilmente sarebbe meglio per gli altri lettori sapere come sarebbe come codice Java.
PPS Il libro Programming in Scala dà una risposta a questa e ad altre domande simili su come viene implementato Scala? Ho ordinato il libro, ma non è ancora arrivato.