在斯卡拉的是,你不需要用“新”创建一个新的“案件类别”的原因是什么? 我想没有答案一段时间,现在搜索。
Answer 1:
难道要如何或为何 ? 由于对方的回答票据,该怎么仅仅是apply
自动产生的配对对象上的方法。
对于为什么 :case类往往用来实现代数数据类型在Scala中,而new
稀少构造函数允许代码是更优雅(创造价值看起来更像是通过模式匹配解构它,例如),而更接近于ADT语法等语言。
Answer 2:
案例类与预建的同伴对象apply()
来实现。 甚至有人抱怨这一点: 在一个案例类的同伴如何重写申请 :)
Answer 3:
案例类为您提供自动生成的 apply
他们的同伴对象的功能,你可以用这样一个构造函数。
在斯卡拉反编译字节代码,你会发现apply
如下面的创建功能:
object Person {
def apply(name: String, age: Integer): Person = new Person(name,age)
}
例如:
case class Person(name: String, age: Integer)
下面三个都做同样的事情。
val p0 = new Person("Frank", 23) // normal constructor
val p1 = Person("Frank", 23) // this uses apply
val p2 = Person.apply("Frank", 23) // using apply manually
所以,如果你使用val p1 = Person("Frank", 23)
它不是一个构造函数 ,这个调用应用方法的方法。
请阅读斯卡拉对象申请-功能的更多信息。
文章来源: Why “case class” doesn't need “new” to create a new object