1
我想了解scala unapply方法。斯卡拉unapply方法
以下是我的理解。说,如果我有一个Person对象:
class Person(val fname: String, val lname: String)
object Person{
def unapply(x: Person) : Option[(String, String)] =
Some(x.fname,x.lname)
}
new Person("Magic", "Mike") match {
case Person(x, y) => s"Last Name is ${y}"
case _ => "Unknown"
}
这我相信的情况下要求是这样的:
val temp = Person.unapply(new Person("Magic", "Mike"))
if (temp != None) { val (x, y) = temp.get }
else { <go to next case> }
但如何做以下不应用工作的时候,我有如下图所示:
new Person("Magic", "Mike") match {
case Person("Harold", y) => s"Last Name is ${y}"
case Person("Magic", y) => s"Last Name is ${y}"
case _ => "Unknown"
}
它如何在不适用的方法中访问fname(“Magic”)的值,并给出与第一个相同/正确的结果?
这很神奇!说真的,在哪里没有太多的关于“它是如何工作的”。 Scala编译器将'Person(foo,bar)'看作'Person(foo,bar)',并用适当的参数调用Person.unapply来替换它,检查返回值,并将值赋给提供的变量或将它们与给定的常量进行匹配。 – Dima