Como a correspondência de padrões no Scala é implementada no nível do bytecode?
É como uma série de if (x instanceof Foo)
construções, ou algo mais? Quais são as implicações de desempenho?
Por exemplo, dado o código a seguir (das páginas 46 a 48 do Scala By Example ), como seria o código Java equivalente para o eval
método?
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 ler bytecode Java, portanto, uma representação de bytecode seria boa o suficiente para mim, mas provavelmente seria melhor para os outros leitores saberem como seria o código Java.
PPS O livro Programming in Scala dá uma resposta a esta e outras perguntas semelhantes sobre como o Scala é implementado? Eu pedi o livro, mas ele ainda não chegou.