Scala делает несколько вещей в одной и той же ветке - PullRequest
0 голосов
/ 09 ноября 2018

Знаете ли вы какие-нибудь хорошие способы сделать несколько вещей в одной ветви дела?

Примерно так

case ANODE(NONLEAF, children, depth) =>
{println(" "*(16/depth)+"[]");
children.foreach(nodes_queue.enqueue(_))}

Этот код взят из моего дизайна функции, которая распечатывает дерево с использованием первого хода в ширину. Сопоставление с образцом позволяет мне понять, какой тип узла я печатаю. Поэтому мне кажется неизбежным делать разные вещи в одной и той же инструкции case (например, распечатать узел, затем поставить в очередь его дочерние элементы для последующей печати).

Компилятор жалуется на это. Я добавил фигурные скобки вокруг утверждений, но это не помогает.

Текущее решение, которое у меня есть для этого, состоит в том, чтобы использовать функцию для замены этих операторов и поместить вызов функции после стрелки (=>). Но это уродливо и многословно.

Я гуглил его и нашел только вопросы о "шаблоне, соответствующем нескольким условиям". Есть ли у вас какие-либо идеи о том, как сделать это простым и понятным способом?

Ваша помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 09 ноября 2018

Вы должны иметь возможность поместить их только под строкой дела:

case ANODE(NONLEAF, children, depth) =>
  println(" "*(16/depth)+"[]")
  children.foreach(nodes_queue.enqueue(_))

должно быть достаточно.

Обычно я ставлю фигурные скобки, чтобы было понятнее

case ANODE(NONLEAF, children, depth) => {
  println(" "*(16/depth)+"[]")
  children.foreach(nodes_queue.enqueue(_))
}
case ...

Надеюсь, это поможет.

PS: я проверял это здесь https://scastie.scala -lang.org / d0PO3SMxTDuTi6eZM2whyw

...