Собраться или не собраться: оператор Case блок


Здесь я задаю конкретный вопрос (а не мнение): существует ли какая-либо рекомендация руководства по стилю scala для следующего " случая о:", касающаяся того, следует ли избегать (необязательного) использования фигурных скобок или если оба варианта с/без приемлемы:

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

Я изначально не был уверен, что это даже сработает (думал, что это может сделать провал): но он делает правильный Прорыв:

scala> mycase(0)
zero
blah zero

Я специально хочу знать, был ли канонический ответ на это (не "я предпочитаю" , и т.д.). Например, для java Sun давно заявила, что размещение начальной фигурной скобки для метода может произойти либо на той же, либо на следующей строке - и то, и другое приемлемо. есть ли такой ясный ответ в данном случае?

UPDATE Ответ, приведенный ниже @acjay, содержит ссылку на руководство по стилю. Внутри-специфическая реклама.

Из http://docs.scala-lang.org/style/control-structures.html#curlybraces

Case-опустить скобки, если выражение case помещается на одной линии. В противном случае используйте фигурные скобки для ясности (даже если они не являются требуется парсером).

3 5

3 ответа:

Руководство по стилю Scala об этом http://docs.scala-lang.org/style/control-structures.html#curly-braces кажется измененным, где говорится

Case - всегда опускайте фигурные скобки в предложениях case.

На самом деле, при редактировании в IntelliJ, он будет напоминать пользователю о ненужных скобках вокруг блока case.

Таким образом, чтобы избежать дальнейшего замешательства пользователей, пожалуйста, Внесите поправку в принятый ответ:)

Руководство по стилю документации Scala гласит:

Case-опустить фигурные скобки, если выражение case помещается в одну строку. В противном случае используйте фигурные скобки для ясности (даже если они не являются требуется парсером).

Поэтому правильный формат:

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

Отдельно от вопроса, но в соответствии с приведенным примером, раздел Объявления руководства по стилю упоминает предпочтительное форматирование для match как например:

Методы, содержащие одно выражение соответствия, должны быть объявлены следующим образом:
def sum(ls: List[Int]): Int = ls match {
  case hd :: tail => hd + sum(tail)
  case Nil => 0
}

В отношении той же / следующей строки для фигурной скобки руководство по стилю является явным и на этом:

Открывающие фигурные скобки ({) должны находиться на той же строке, что и объявление они представляют собой:

def foo = {   
  ...
}

Технически синтаксический анализатор Scala поддерживает нотацию в стиле GNU с открытие фигурных скобок в строке, следующей за объявлением. Тем не менее, парсер не очень предсказуем при работе с этим стилем из-за способ, в котором точка с запятой вывод осуществляется. Много головной боли будет сохранен, просто следуя конвенции фигурной скобки продемонстрировано выше.