Scala中的案例类

时间:2014-11-19 16:52:29

标签: scala functional-programming

案例类如何在Scala中运行?

这背后是否有一些魔力......这就是问题的答案..

当我们创建案例类时说

case class User(name:String)

这个案例类的背后是什么?

1 个答案:

答案 0 :(得分:-3)

案例类是特殊的,因为Scala会自动为它们创建一个伴随对象:一个单例对象,它不仅包含用于创建案例类的新实例的apply方法,还包含一个unapply方法需要实现的方法一个对象,以便它成为一个提取器。

当你创建一个case类时,在伴随对象中创建一个apply和unapply的提取器方法。

例如,当您创建一个案例类时,说使用json对象构建的模块

如果您的提取器应该只从给定对象中提取单个参数,则unapply方法的签名如下所示:

def unapply(object: S): Option[T]

case class Module(json:JsObject)

这扩展如下

object Module{

def apply(json:JsObject) = new Module(json)

def unapply(object: S): Option[T]

}

现在,当我们匹配时,具有unapply的所有内容将始终有效

val module = Json.obj("key" -> "value")

module match{
case Module(extractedData) => extractedData
case _ => Json.obj()
}

因此,在这种情况下,调用Module.unapply方法并将模块对象传递给此unapply方法,该方法检查这是否是Module的实例并且案例进行评估。

}