支持或不支持:case语句块

jav*_*dba 6 coding-style scala

我在这里问一个具体的问题(不是意见):是否有任何scala风格的指南推荐以下"案例o:"解决是否要避免(可选)使用大括号或是否有/无接受:

 def mycase(x : Int) = {
      x match {
      case 0 =>
        println("zero")
        println("blah zero")
      case 1 =>
        println("one")
      }
Run Code Online (Sandbox Code Playgroud)

我最初并不相信它甚至可以工作(认为它可能会失败):但是它做了正确的突破:

scala> mycase(0)
zero
blah zero
Run Code Online (Sandbox Code Playgroud)

我特别想知道是否有一个规范的答案(不是"我喜欢"等).例如,对于Java,Sun早就说过,为方法放置初始大括号可能会在同一行或下一行上发生 - 两者都可以接受.在这种情况下有这么明确的答案吗?

更新 @acjay下面提供的答案提供了样式指南的链接.里面是一个特定的模糊.

来自 http://docs.scala-lang.org/style/control-structures.html#curlybraces

case - 如果case表达式适合单行,则省略大括号.否则,为清晰起见使用花括号(即使解析器不需要它们).

mzh*_*ang 12

关于这个http://docs.scala-lang.org/style/control-structures.html#curly-braces的Scala样式指南似乎已经改变了,它说的是

case - 在case子句中总是省略大括号.

实际上,在IntelliJ中进行编辑时,它会提醒用户在case块周围不必要的括号.

因此,为了避免对用户造成进一步的混淆,请对接受的答案进行更正:)


acj*_*jay 5

斯卡拉文档风格指南说:

case - 如果 case 表达式适合一行,则省略大括号。否则,为了清楚起见,请使用花括号(即使解析器不需要它们)。

因此,正确的格式是:

def mycase(x : Int) = x match {
  case 0 => {
    println("zero")
    println("blah zero")
  }
  case 1 => println("one")
}
Run Code Online (Sandbox Code Playgroud)

与问题分开,但与给出的示例相关,样式指南的声明部分提到了这样的首选格式match

包含单个匹配表达式的方法应按以下方式声明:

def sum(ls: List[Int]): Int = ls match {
  case hd :: tail => hd + sum(tail)
  case Nil => 0
}
Run Code Online (Sandbox Code Playgroud)