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