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