http://www.scala-lang.org/node/112でコードを試していますが、何かをスローするように見えないものに対して一致エラーが発生します。
これは元のコードです:
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 Application {
val x = Twice(21)
x match { case Twice(n) => Console.println(n) } // prints 21
}
奇数を渡すとどうなるかをテストするために、数行追加しました。
object TwiceTest extends Application {
val x = Twice(21)
x match { case Twice(n) => Console.println(n) } // prints 21
val y = 21
y match { case Twice(n) => Console.println(n) } // throws scala.MatchError: 21 (of class java.lang.Integer)
}
私が知る限り、21 または任意の奇数の場合も、オブジェクトの unapply メソッドで処理する必要があります。なぜそうではないのか、誰かが説明できますか?