W jaki sposób dopasowywanie wzorców w Scali jest realizowane na poziomie kodu bajtowego?
Czy to jak seria if (x instanceof Foo)
konstrukcji, czy coś innego? Jakie są jego konsekwencje dla wydajności?
Na przykład, biorąc pod uwagę następujący kod (ze stron Scala By Przykład, strony 46-48), jak wyglądałby odpowiednik kodu Java dla tej eval
metody?
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 Potrafię czytać kod bajtowy Javy, więc reprezentacja kodu bajtowego byłaby dla mnie wystarczająca, ale prawdopodobnie byłoby lepiej, aby inni czytelnicy wiedzieli, jak będzie wyglądał kod Java.
PPS Czy książka Programming in Scala zawiera odpowiedź na to i podobne pytania dotyczące implementacji Scali? Zamówiłem książkę, ale jeszcze nie dotarła.