我正在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 方法处理。有人可以解释为什么不是这样吗?