Scala工厂被编译器忽略了吗?

cro*_*ies 1 scala syntactic-sugar companion-object

我花了这么多时间在我的伴侣对象中组合一个工厂方法,如下所示:

class Stuff(val a: Int, val b: Long) { this() = this(0,0L) }

object Stuff {
  def apply(a:Int, b:Int) = new Stuff(a, b.toLong)
}
Run Code Online (Sandbox Code Playgroud)

但是,当我以为我杀了它时,我就去编译,这不起作用:

val widget = new Stuff(1,2)
Run Code Online (Sandbox Code Playgroud)

到底是怎么回事!?我刚做完了!?救命!!!

cro*_*ies 7

年轻的斯卡拉编码器,没有恐惧,因为答案很简单.您没有正确使用工厂.看,这段代码实际上会做你想要的:

val widget = Stuff(1,2)
//makes Stuff(1, 2L)
Run Code Online (Sandbox Code Playgroud)

这里的问题是你的语法.当你调用new它时实例化一个新类Stuff.但apply它真的是语法糖,widget.apply(1,2)并没有太多其他的东西.

您还可以在apply此处了解有关糖的更多信息:Scala的apply()方法魔术是如何工作的?

继续编码年轻人.