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 本Programming in Scalaは、Scala がどのように実装されているかについて、これと同様の質問に答えていますか? 本を注文しましたが、まだ届きません。