はじめに
Scalaの初心者の人にforの挙動を説明したり、パフォーマンスの調査等をする際に、
forがどのように変換されるかチェックしたいケースがあるかと思います。
そのような時のために、
Scalaのfor内包表記の変換結果を確認する方法についてまとめました。
結論
$ scalac -Xprint:parser 対象のファイル
で確認できます。
サンプルコード
Test.scala
object Test {
for {
num1 <- List(1, 2, 3)
num2 <- List(10, 20, 30)
if num2 != 2
} yield (num1, num2)
}
変換結果:
$ scalac -Xprint:parser Test.scala
[[syntax trees at end of parser]] // Test.scala
package <empty> {
object Test extends scala.AnyRef {
def <init>() = {
super.<init>();
()
};
List(1, 2, 3).flatMap(((num1) => List(10, 20, 30).withFilter(((num2) => num2.$bang$eq(2))).map(((num2) => scala.Tuple2(num1, num2)))))
}
}