Scala の trait を解剖してみた

trait Trait {

    val value: String = s"$getOne"

    def getOne: Int = 1

    def getTwo: Int

}

これを jad すると

// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3)
// Source File Name:   Trait.scala

import scala.Predef$;
import scala.StringContext;
import scala.runtime.BoxesRunTime;

public abstract class Trait$class
{

    public static int getOne(Trait $this)
    {
        return 1;
    }

    public static void $init$(Trait $this)
    {
        $this.Trait$_setter_$value_$eq((new StringContext(Predef$.MODULE$.wrapRefArray((Object[])(new String[] {
            "", ""
        })))).s(Predef$.MODULE$.genericWrapArray(((Object) (new Object[] {
            BoxesRunTime.boxToInteger($this.getOne())
        })))));
    }
}


// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3)
// Source File Name:   Trait.scala


public interface Trait
{

    public abstract void Trait$_setter_$value_$eq(String s);

    public abstract String value();

    public abstract int getOne();

    public abstract int getTwo();
}

こうなりました

String Interpolation については以下のスライドが詳しいです

About

ウェブ界隈でエンジニアとして労働活動に励んでいる @gomi_ningen 個人のブログです

Copyright © 53ningen.com