Wie wird der Mustervergleich in Scala auf Bytecode-Ebene implementiert?
Ist es wie eine Reihe von if (x instanceof Foo)
Konstrukten oder etwas anderes? Was sind die Auswirkungen auf die Leistung?
Wie würde beispielsweise der entsprechende Java-Code für die Methode angesichts des folgenden Codes (von Scala By Example, Seiten 46-48) eval
aussehen?
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 Ich kann Java-Bytecode lesen, daher wäre eine Bytecode-Darstellung für mich gut genug, aber wahrscheinlich wäre es für die anderen Leser besser zu wissen, wie es als Java-Code aussehen würde.
PPS Gibt das Buch Programmieren in Scala eine Antwort auf diese und ähnliche Fragen zur Implementierung von Scala? Ich habe das Buch bestellt, aber es ist noch nicht angekommen.