In che modo la corrispondenza dei pattern in Scala è implementata a livello di byte?In che modo la corrispondenza dei pattern in Scala è implementata a livello di byte?
È come una serie di costrutti if (x instanceof Foo)
o qualcos'altro? Quali sono le sue implicazioni in termini di prestazioni?
Ad esempio, dato il seguente codice (da Scala By Example pagine 46-48), come sarebbe l'equivalente codice Java per il metodo eval
?
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)
}
P.S. Posso leggere il bytecode di Java, quindi una rappresentazione di bytecode sarebbe abbastanza buona per me, ma probabilmente sarebbe meglio per gli altri lettori sapere come sarebbe simile al codice Java.
P.P.S. Il libro Programming in Scala dà una risposta a questo e domande simili su come viene implementato Scala? Ho ordinato il libro, ma non è ancora arrivato.
Perché non si compila semplicemente l'esempio e lo si disassembla con un disassemblatore bytecode Java? – Zifre
Probabilmente lo farò, a meno che qualcuno non dia una buona risposta prima. Ma adesso voglio dormire un po '. ;) –
La domanda è utile per altri lettori! – djondal