エクストラクタとその使用について少し混乱しています。私は 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
それで、私はそれを正しく理解していますか?