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 eval
ressemblerait 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é.