我对提取器及其使用感到困惑。我阅读了 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
那么,我理解对了吗?