Scala 为什么使用重载构造函数;新";需要什么?

Scala 为什么使用重载构造函数;新";需要什么?,scala,Scala,尝试提供重载构造函数时,如下所示 case class Neuron(weight: Double, tHold: Double, var isFired: Boolean, inputNeuron: List[Neuron], id: String) { def this() = this(0 , 0 , false , List() , "") } val n1 = Neuron() causes compile time error : not enough a

尝试提供重载构造函数时,如下所示

  case class Neuron(weight: Double, tHold: Double, var isFired: Boolean, inputNeuron: List[Neuron], id: String) {
    def this() = this(0 , 0 , false , List() , "")
  }

  val n1 = Neuron()  

causes compile time error : not enough arguments for method apply: (weight: Double, tHold: Double, isFired: Boolean, inputNeuron: 
因此,我需要使用:

val n1 = new Neuron()
但是如果我删除重载的“this”引用,我可以调用构造函数而不使用“new”:


为什么我需要在上面的场景中使用“new”以及为什么只有在使用重载构造函数时才需要“new”?

人们可能会争论是否应该将其他构造函数传播到伴随对象的apply方法(这就是
Neuron()
的含义)。赞成:这更容易。反对:额外的开销,如果您想要的只是额外的apply方法,那么最好将它放在companion中

说到这里,你真的想要另一个构造器吗,或者这个构造器可以吗

case class Neuron(w: Double, tH: Double, var fired: Boolean, in: List[Neuron], id: String)
object Neuron {
  def apply() = new Neuron(0, 0, false, Nil, "")
}

new
-不管怎样,通过同伴对象进行较少的访问通常是获取新实例的更方便的方式。

人们可能会争论是否应该将其他构造函数传播到同伴对象的apply方法(这就是
Neuron()
)。赞成:这更容易。反对:额外的开销,如果您想要的只是额外的apply方法,那么最好将它放在companion中

说到这里,你真的想要另一个构造器吗,或者这个构造器可以吗

case class Neuron(w: Double, tH: Double, var fired: Boolean, in: List[Neuron], id: String)
object Neuron {
  def apply() = new Neuron(0, 0, false, Nil, "")
}

new
-通过同伴对象进行较少的访问通常是获取新实例的更方便的方式。

当您不使用
new
时,它会搜索
apply
方法(同伴对象),这显然不是构造函数

如果要以构造函数为目标,必须使用
new

但是如果我删除重载的“this”引用,我可以调用构造函数而不使用“new”

请注意,您在OP中提出的这一点是错误的。
实际上,即使使用重载的
this
,您仍然可以进行以下调用:

Neuron(0.0,0.0,false,List(),"") //still apply() called

它是完全独立的。

当您不使用
new
时,它会搜索
apply
方法(伴随对象),该方法显然不是构造函数

如果要以构造函数为目标,必须使用
new

但是如果我删除重载的“this”引用,我可以调用构造函数而不使用“new”

请注意,您在OP中提出的这一点是错误的。
实际上,即使使用重载的
this
,您仍然可以进行以下调用:

Neuron(0.0,0.0,false,List(),"") //still apply() called
它是完全独立的