Как вы кодируете кодовый блок, соответствующий шаблону, в Scala? - PullRequest
5 голосов
/ 10 мая 2010

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

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

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

Ответы [ 2 ]

6 голосов
/ 10 мая 2010

Вы должны использовать 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
0 голосов
/ 10 мая 2010

Этого должно быть достаточно, чтобы объяснить это: Путешествие по Скала: сопоставление с образцом

...