【问题标题】:Omitting curly braces in scala for multiple lines在scala中省略多行的花括号
【发布时间】:2020-09-14 06:04:47
【问题描述】:

我见过一些 scala 代码示例,其中多行代码用作没有花括号的代码块,例如:

x match {
  case a:Int =>
    val b = 1
    val c = b +3
    println("hello!")
    c
  case _ => 5
}

对于一些使用以下形式的隐式参数的非常长的函数也是如此:

a.map { implicit x =>
  // many, many complex lines of code
}

相对于:

a.map { implicit x => {
  // many, many complex lines of code
}}

我看到很多文档/常见问题解答指出多行代码应始终用大括号括起来,但找不到这些异常的解释。我很想理解或有良好的直觉,所以这对我来说并不像魔法。

【问题讨论】:

标签: scala


【解决方案1】:

在 case 语句中,主体虽然看起来像一个块,但实际上是函数字面量的表达式部分,遵循 arg => expr 的形式。由于case 语句由另一个case 语句或case 块的右花括号终止,因此函数字面量的边界是隐式定义的,表达式不需要自己的块分隔符

【讨论】:

  • 您的回答很棒,我已经找到了答案。但是,由于这对初学者来说是一个重要的问题,因此许多其他人也可能会关注它。您能否更正答案中的一些错别字?谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-31
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
  • 2016-12-29
相关资源
最近更新 更多