なんじゃくにっき

プログラミングの話題中心。

DelayedInitを逆コンパイルしてみる

DelayedInitトレイトについてのブログ記事を見かけた
http://d.hatena.ne.jp/Kazuhira/20110605/1307266403
のでどうなってるのかと思って逆コンパイルしてみた。
 
 
こういうScalaコードからできたclassが・・

package a

class Delayed(value: String) extends DelayedInit {
println("constructor block")

def delayedInit(x: => Unit): Unit = {
println(value)
x
}
}

 
コンパイルでこうなる
package a;

import scala.DelayedInit;
import scala.Function0;
import scala.Predef.;
import scala.ScalaObject;
import scala.reflect.ScalaSignature;
import scala.runtime.AbstractFunction0;
import scala.runtime.BoxedUnit;

@ScalaSignature(bytes="\006\001E2A!\001\002\001\013\t9A)\0327bs\026$'\"A\002\002\003\005\034\001a\005\003\001\r9!\002CA\004\r\033\005A!BA\005\013\003\021a\027M\\4\013\003-\tAA[1wC&\021Q\002\003\002\007\037\nTWm\031;\021\005=\021R\"\001\t\013\003E\tQa]2bY\006L!a\005\t\003\027\021+G.Y=fI&s\027\016\036\t\003\037UI!A\006\t\003\027M\033\027\r\\1PE*,7\r\036\005\t1\001\021\t\021)A\0053\005)a/\0317vKB\021!$\b\b\003\037mI!\001\b\t\002\rA\023X\rZ3g\023\tqrD\001\004TiJLgn\032\006\0039AAQ!\t\001\005\002\t\na\001P5oSRtDCA\022&!\t!\003!D\001\003\021\025A\002\0051\001\032\021\0259\003\001\"\001)\003-!W\r\\1zK\022Le.\033;\025\005%b\003CA\b+\023\tY\003C\001\003V]&$\bBB\027'\t\003\007a&A\001y!\ryq&K\005\003aA\021\001\002\0202z]\006lWM\020")
public class Delayed
implements DelayedInit, ScalaObject {
private final String value;

public void delayedInit(Function0<BoxedUnit> x) {
Predef..MODULE$.println(this.value);
x.apply$mcV$sp();
}

public Delayed(String value) {
super.delayedInit(new delayedInit.body());
}

public final class delayedInit$body extends AbstractFunction0
implements ScalaObject {
public final Object apply() {
Predef..MODULE$.println("constructor block");
return BoxedUnit.UNIT;
}

public delayedInit$body() {}
}

}

 
delayedInit$bodyっていう内部クラスができてるのね・・