为案例类

时间:2017-03-20 10:38:08

标签: scala case-class

据我所知,case class伴随对象是由编译器自动生成的。

case class Clas(i: Int)

但在我的情况下,为了方便起见,我想添加一些有效的方法apply(s: String): Clas。所以我自己将对象定义为:

object Clas {
     def apply(s: String) = //create Clas
}

它是如何工作的?为什么编译器生成的对象的方法仍然可用?

1 个答案:

答案 0 :(得分:4)

编译器将您的方法与伴随对象中的合成方法合并:

scala> :past
// Entering paste mode (ctrl-D to finish)

case class Clas(i: Int)
object Clas { def apply(s: String): Clas = null }

// Exiting paste mode, now interpreting.

defined class Clas
defined object Clas

scala> Clas.apply _
<console>:13: error: ambiguous reference to overloaded definition,
both method apply in object Clas of type (i: Int)Clas
and  method apply in object Clas of type (s: String)Clas
match expected type ?
       Clas.apply _
            ^