Як реалізується відповідність шаблонів у Scala на рівні байт-коду?
Це як серія if (x instanceof Foo)
конструкцій чи щось інше? Які її наслідки для продуктивності?
Наприклад, з огляду на наступний код (зі сторінок 46-48 Scala By Example ), як 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? Я замовив книгу, але вона ще не дійшла.