我在这里问一个具体的问题(不是意见):是否有针对以下情况的scala风格指南推荐"案例o:"解决是否要避免(可选)使用牙箍,或者是否可以使用牙箍:
def mycase(x : Int) = {
x match {
case 0 =>
println("zero")
println("blah zero")
case 1 =>
println("one")
}
我最初并不相信它会工作(认为它可能会失败):但是它确实是正确的突破:
scala> mycase(0)
zero
blah zero
我特别想知道是否有一个规范的答案(不是#34;我更喜欢"等等)。例如。对于java,Sun很久以前曾说过,为方法放置初始大括号可能会在同一行或下一行上发生 - 两者都可以接受。在这种情况下有这么明确的答案吗?
更新 @acjay在下面提供的答案提供了指向样式指南的链接。这里面是一个特定的模糊。
来自http://docs.scala-lang.org/style/control-structures.html#curlybraces
case - 如果case表达式适合单行,则省略大括号。 否则,为清晰起见使用花括号(即使它们不是 解析器所需的。)
答案 0 :(得分:11)
关于此http://docs.scala-lang.org/style/control-structures.html#curly-braces的Scala风格指南似乎已更改,其中显示
case - 在case子句中总是省略大括号。
实际上,在IntelliJ中进行编辑时,它会提醒用户在大小写块周围不必要的大括号。
因此,为了避免对用户造成进一步的混淆,请对接受的答案进行更正:)
答案 1 :(得分:4)
Scala Documentation Style Guide说:
case - 如果case表达式适合单行,则省略大括号。 否则,为清晰起见使用花括号(即使它们不是 解析器所需的。)
因此,正确的格式是:
def mycase(x : Int) = x match {
case 0 => {
println("zero")
println("blah zero")
}
case 1 => println("one")
}
与问题分开,但与给出的示例相关,样式指南的the declarations section提到了match
的首选格式:
包含单个匹配表达式的方法应按以下方式声明:
def sum(ls: List[Int]): Int = ls match {
case hd :: tail => hd + sum(tail)
case Nil => 0
}
答案 2 :(得分:0)
关于花括号的相同/下一行,Style Guide is explicit也是如此:
打开花括号({)必须与声明位于同一行 他们代表:
def foo = {
...
}
从技术上讲,Scala的解析器确实支持GNU风格的表示法 在声明后的行上打开括号。然而 因为处理这种风格,解析器不是非常可预测的 半结肠推理的实现方式。很多头痛 将通过简单地遵循大括号约定来保存 如上所述。