我正在学习 Scala,并对try-catch-finally语法感到困惑。
在Scala 语法规范中,它说:
\nExpr1 ::= \xe2\x80\x98try\xe2\x80\x99 Expr [\xe2\x80\x98catch\xe2\x80\x99 Expr] [\xe2\x80\x98finally\xe2\x80\x99 Expr]\n | ...\nRun Code Online (Sandbox Code Playgroud)\n我可以编写没有{ }块的表达式吗,如下所示:
try\n println("Hello")\ncatch\n RuntimeException e => println("" + e)\nfinally\n println("World")\nRun Code Online (Sandbox Code Playgroud)\n或者表达式必须是块表达式?
\nScala 3 (Dotty) 正在尝试使用可选的大括号(显着缩进),因此以下工作
scala> try
| 1 / 0
| catch
| case e => println(s"good catch $e")
| finally
| println("Celebration dance :)")
|
good catch java.lang.ArithmeticException: / by zero
Celebration dance :)
val res1: AnyVal = ()
Run Code Online (Sandbox Code Playgroud)
我们注意到处理程序的地方
case e => println(s"good catch $e")
Run Code Online (Sandbox Code Playgroud)
不需要像Scala 2中那样的大括号。事实上,由于关键字后子句的特殊处理,casecatch以下内容也可以工作
scala> try
| 1 / 0
| catch
| case e => println(s"good catch $e")
| finally
| println("Celebration dance :)")
|
good catch java.lang.ArithmeticException: / by zero
Celebration dance :)
val res2: AnyVal = ()
Run Code Online (Sandbox Code Playgroud)
我们注意到处理程序不必在之后缩进catch
catch
case e => println(s"good catch $e")
Run Code Online (Sandbox Code Playgroud)