Можно ли упростить этот оператор сопоставления scala, используя @ синтаксис? - PullRequest
3 голосов
/ 26 июня 2019

Можно ли упростить следующую инструкцию match, используя синтаксис @?

foo match {
  case f: Foo => y(f)
  case f if forceY => y(f)
  case _ => x
}

, где forceY - это boolean.

Я попробовал следующее, но получаю ошибки компиляции, и это выглядит как сомнительный синтаксис для интерпретатора. Возможно, это невозможно выразить?

foo match {
  case f @(_: Foo | _ if forceY) => y(f)
  case _ => x
}

1 Ответ

6 голосов
/ 26 июня 2019
foo match {
  case f if f.isInstanceOf[Foo] || forceY => y(f)
  case _ => x
}

Вы не можете использовать @ специально, потому что синтаксис f: Foo может появляться только в соответствующей части case, а не в условии (после if).

Оригиналверсия тоже не плохая.Если то, что у вас на самом деле справа, длиннее, чем y, вы можете явно определить y и оставить три случая как они есть, так как они читаются просто отлично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...