Если у меня есть выражение match, как я могу заставить его автоматически игнорировать несоответствие  без, явно выполняющего case _ =>? Есть ли способ создать функцию, которая делает что-то вроде этого, может быть?
Есть ли способ игнорировать несоответствующий случай?
Ответ 1
Вам нужен общий способ обработки "игнорирования". Варианты, среди других классов, обеспечивают это (помимо всего прочего). Таким образом, вы можете:
val i = 7
Some(i) collect {
  case 3 => "Yay!"
  case 5 => "Boo!"
}
 чтобы получить None (набран как Option[String]). Поэтому в основном, если вы измените x match на Some(x) collect, вы получите нужную функциональность. Лучше сделать это, когда вам удобнее обрабатывать варианты.
Ответ 2
Напишите общий сокет:
object Match {
    def default: PartialFunction[Any, Unit] = { case _ => }
    def apply[T](x: T)(body: PartialFunction[T, Unit]) = (body orElse default)(x)
}
Пример:
scala> 1 to 5 foreach (Match(_) {
     |   case 2 => println("two")
     |   case 3 => println("three")
     | }
     | )
two
three
Вам может быть интересно также в методах компаньона PartialFunction cond и condOpt.
Ответ 3
Любой блок соответствия, который не может обрабатывать все возможные входные значения, образует Частичную функцию, которую можно определить и использовать в Scala.
 PartialFunction является подклассом Function и добавляет метод isDefinedAt, который возвращает true, если он имеет определенное соответствие для поставленного значения. Частичные функции лучше всего использовать в тех местах, которые проверяют определение, например блоки catch или метод collect в API-интерфейсах 2.8. В противном случае вы получите исключение, если попытаетесь вызвать его со значением, которое не определено как вход.
