Как соответствие шаблонов в Scala реализовано на уровне байт-кода?
Это как серия конструкций if (x instanceof Foo)
или что-то еще? Каковы его последствия для производительности?
Например, с учетом следующего кода (из Scala By Example pages 46-48), как бы эквивалентный Java-код для 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. Я могу читать байт-код Java, поэтому представление байт-кода было бы достаточно для меня, но, вероятно, было бы лучше, если бы другие читатели знали, как это будет выглядеть как Java-код.
P.P.S. Означает ли книга Программирование в Scala ответ на этот и подобные вопросы о том, как реализована Scala? Я заказал книгу, но она еще не прибыла.