for example in akka we have:
def receive = {
case "test" => log.info("received test")
case _ => log.info("received unknown message")
}
is it a pattern match or not? if it is not a pattern match what is it?
for example in akka we have:
def receive = {
case "test" => log.info("received test")
case _ => log.info("received unknown message")
}
is it a pattern match or not? if it is not a pattern match what is it?
To me that looks like a Pattern Matching Anonymous Function.
This is called a PartialFunction if you look at the type definition of Receive
it is a PartialFunction[Any, Unit]
, it’s partial because not matching all possible cases won’t result in a match exception. You can also use this notation for a normal function.
For example:
val f : Int => Option[Int] = {
case 3 => Some(3)
case _ => None
}
The above works without the match keyword because they are functions. However if you have a concrete value you need to use the match
keyword to tell the compiler what you want to pattern match on.
That’s right: SLS§8.5: Pattern Matching | Scala 2.13
Two quick notes, just to be explicit:
PartialFunction
(which it is for Akka’s receive
apply
, but one of PartialFunction
’s methods, like applyOrElse
.Also, as of Scala 2.13.1, when the expected type is PartialFunction
you can drop the case
when specifying a total function. So
def receive = (x => println(x))
// or
def receive = println(_)
instead of
def receive = { case x => println(x) }