Comment la correspondance de modèles dans Scala est-elle implémentée au niveau du bytecode?
Est-ce comme une série de if (x instanceof Foo)constructions, ou autre chose? Quelles sont ses implications en termes de performances?
Par exemple, étant donné le code suivant (extrait des pages 46 à 48 de Scala By Example ), à quoi evalressemblerait le code Java équivalent pour la méthode?
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 Je peux lire le bytecode Java, donc une représentation bytecode serait assez bonne pour moi, mais il serait probablement préférable que les autres lecteurs sachent à quoi cela ressemblerait en tant que code Java.
PPS Le livre Programming in Scala donne-t-il une réponse à cette question et à des questions similaires sur la manière dont Scala est implémentée? J'ai commandé le livre, mais il n'est pas encore arrivé.