【发布时间】:2017-03-28 12:19:39
【问题描述】:
我写了以下简单的例子:
def main(args: Array[String]) = {
try{
throw new IllegalArgumentException
} catch {
case Ex(e) => println("IllegalArgumentException was thrown")
}
}
object Ex{
def unapply(arg: Throwable): Option[Throwable] = arg match {
case arg: IllegalArgumentException => Some(arg)
case _ => None
}
}
并且对它的工作感到非常困惑。在 catch 子句中,我们甚至没有声明 e。另一个是在 catch 子句中我们匹配Some[Throwable],而不是Throwable 本身。因此,我尝试执行以下操作:
catch {
case Ex(e) => println("IllegalArgumentException was thrown")
case None => println("None") //error, found None.type required Throwable
}
它没有工作。为什么?我们匹配了Some[Throwable]。 None 怎么了?
【问题讨论】:
-
@pamu 对,你的问题是关于提取器而不是真正的例外。