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の実装方法に関するこの質問および同様の質問に対する回答を提供していますか?その本を注文しましたが、まだ到着していません。