2012-08-02 82 views

回答

37

你想要的如何为什么?正如其他答案注释,如何只是apply方法在自动生成的随播对象上。

对于为什么:case类经常被用来在Scala中实现algebraic data types,并且new稀少构造函数允许代码,更优雅(创建值看起来更像经由模式匹配解构它,例如)和更接近于其他语言中的ADT语法。

+1

谢谢你,这就是我要找的:) – 2012-08-03 16:29:18

1

案例分类为您提供一个自动生成的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)它不是一个构造,这个调用应用方法的方法。

更多信息请阅读scala-object-apply-functions

相关问题