バイトコードレベルでScalaのパターンマッチングはどのように実装されていますか?バイトコードレベルで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)
}
P.S.私はJavaのバイトコードを読むことができるので、バイトコードの表現で十分ですが、他の読者にとっては、Javaコードとどのように見えるかを知る方が良いでしょう。
P.P.S. Scalaがどのように実装されているかについては、書籍Programming in Scalaがこれと同様の質問に答えてくれますか?私は本を注文しましたが、まだ到着していません。
このサンプルをコンパイルし、Javaバイトコード逆アセンブラで逆アセンブルしてみませんか? – Zifre
誰かがまず良い答えを出さなければ、おそらくそれをやるでしょう。しかし、今、私はいくつかの睡眠をしたいです。 ;) –
この質問は他の読者には便利です! – djondal