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