Как вы кодируете блокировку кода, соответствующего шаблону в SCALA?

StackOverflow https://stackoverflow.com/questions/2800389

  •  25-09-2019
  •  | 
  •  

Вопрос

Как вы кодируете функцию, которая принимает в блоке кода в качестве параметра, содержащего операторы CASE? Например, в моем блоке кода я не хочу делать совпадение или чехол по умолчанию явно. Я ищу что-то вроде этого

myApi {
    case Whatever() => // code for case 1
    case SomethingElse() => // code for case 2
}

И внутри моего myapi (), он фактически выполнит блок кода и выполняет матчи.

Это было полезно?

Решение

Вы должны использовать PartialFunction за это.

scala> def patternMatchWithPartialFunction(x: Any)(f: PartialFunction[Any, Unit]) = f(x)
patternMatchWithPartialFunction: (x: Any)(f: PartialFunction[Any,Unit])Unit

scala> patternMatchWithPartialFunction("hello") {
     |   case s: String => println("Found a string with value: " + s)
     |   case _ => println("Found something else")
     | }
Found a string with value: hello

scala> patternMatchWithPartialFunction(42) {
     |   case s: String => println("Found a string with value: " + s)
     |   case _ => println("Found something else")
     | }
Found something else

Другие советы

Это должно хватить, чтобы объяснить это: Тур по Scala: сопоставление шаблона

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top