案例类如何在Scala中运行?
这背后是否有一些魔力......这就是问题的答案..
当我们创建案例类时说
case class User(name:String)
这个案例类的背后是什么?
答案 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的实例并且案例进行评估。
}