为什么scala内联工厂方法没有值类?

时间:2016-06-01 14:06:15

标签: scala inline value-class

考虑:

class Wrap(val amount :Int) extends AnyVal

object Wrap {
    @inline final def apply(int :Int) = new Wrap(int)
}

object Playground {
    val w = Wrap(1)
}      

使用(2.11.7)编译scalac -feature -Xprint:all Playground.scala我看到了

Playground.this.w = Wrap.apply(1);

确实,javap -v -private Playground显示:

    89: invokevirtual #75                 // Method Wrap$.apply:(I)I
    92: putfield      #33                 // Field w:I

将Playground构造函数更改为:

val w = new Wrap(1)

都会按预期显示文字1w的分配。我坦率地对这一发现感到非常失望,因为它实际上阻止了使用值类的类型级编程(其中一个ephemeric值类实例是由一系列简单的内联方法创建的。

0 个答案:

没有答案