gfx*_*onk 14 syntax scala exception-handling case
我有以下代码:
try {
< ... some JSON parsing code .. >
}
catch {
case e:ClassCastException => throw new ParseException(body, e)
case e:JSONException => throw new ParseException(body, e)
}
Run Code Online (Sandbox Code Playgroud)
这似乎过于重复.我试过了
case e:ClassCastException | e:JSONException => throw new ParseException(body, e)
Run Code Online (Sandbox Code Playgroud)
但Scala不会让我绑定e
这两种类型 - 足够公平.在处理程序中,我只需要将其视为e
类型Exception
,但我只想在第一个位置匹配,如果它是那些特定类之一.像匹配类型之后的条件,如:
case e:Exception(ClassCastException|JSONException) => throw new ParseException(body, e)
Run Code Online (Sandbox Code Playgroud)
这显然不是正确的语法,但希望你明白我的意思.这样的事情可能吗?
ret*_*nym 24
你不能在Pattern Alternatives(PatternA | PatternB
)中引入绑定.但是您可以使用Pattern Binder(name @ Pattern
)将名称绑定到Pattern Alternatives的结果.
try {
< ... some JSON parsing code .. >
} catch {
case e @ (_: ClassCastException | _: JSONException) => throw new ParseException(body, e)
}
Run Code Online (Sandbox Code Playgroud)
您可以使用新的2.8控件构造:
def foo = //JSON parsing code
import util.control.Exception._
handling(classOf[ClassCastException], classOf[JSONException]) by (t => throw new ParseException(t)) apply foo
Run Code Online (Sandbox Code Playgroud)
(那里可能有一个错误.我找不到jabscreen 的REPL.)