我對提取器及其使用感到困惑。我讀斯卡拉文件,並滿足一個Scala - 提取器對象混淆
object Twice {
def apply(x: Int): Int = x * 2
def unapply(z: Int): Option[Int] = if (z%2 == 0) Some(z/2) else None
}
object TwiceTest extends App {
val x = Twice(21) // x = 42
x match { case Twice(n) => Console.println(n) } // prints 21
}`
正如上面的代碼打印出來,當我們調用x match {case Twice(n) ...
,這意味着Twice(n)
- >Twice.unapply(n)
- >Twice.unapply(42)
並獲得Some(n/2)
- >Some(42/2)
和插件導致成n
再次,打印出21
如果我改變「不應用」如下: def unapply(z: Int): Option[Int] = if (z%2 == 0) Some(z - 2) else None
我從控制檯中看到什麼是40
那麼,我理解它嗎?
是的,有什麼問題嗎? –
因此,它現在改變'n',我的意思是,它在這裏把'n'看作一個變量。我認爲它是功能性的,但事實並非如此。這讓我感到困惑。 – hminle
n不是一個變量,在這種情況下,「兩次(n)」是一個模式,並且你正在提取'n' –