2017-01-20 3 views

Répondre

4

Vous pouvez le faire avec un si-garde:

def receive: String => Unit = { 
    case str if str == "test" => println(str) 
    case _ => println("other") 
} 

Option("test").map(receive) // prints "test" 
Option("foo").map(receive) // prints "other" 

Notez que si vous avez un objet que vous voulez faire référence à, puis des choses comme par exemple foo: Foo(s) ne fonctionnera pas (foo: Foo sera, mais alors vous perdez la référence à la valeur de Foo s). Dans ce cas, vous devez utiliser l'opérateur @:

case class Foo(s: String) 

def receive: Foo => Unit = { 
    case [email protected](s) => println(foo.s) // could've referred to just "s" too 
    case _ => println("other") 
} 

Option(Foo("test")).map(receive) // prints "test" 
0

Si vous voulez un cas pour correspondre à quoi que ce soit, et une référence à elle, utiliser un nom de variable au lieu de underscore

def receive = { 
    case "test" => log.info("received test") 
    case other => log.info("received unknown message: " + other) 
}