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
它是完全独立的