Как вы кодируете блокировку кода, соответствующего шаблону в SCALA?
-
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: сопоставление шаблона
Не связан с StackOverflow