2017-01-20 18 views
2

Глядя на эту функцию в качестве примера:Какова ссылка объекта, с которым работает частичная функция?

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

Какой объект подкрепляются на? С правой стороны стрелок, как я могу ссылаться на объект, который будет согласован?

ответ

4

Вы можете сделать это с помощью if-охранник:

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" 

Обратите внимание, что если у вас есть объект, который вы хотите обратиться, то такие вещи, как, например, foo: Foo(s) не будет работать (foo: Foo будет, но тогда вы потеряете ссылку на значение Foo s). В этом случае вам необходимо использовать @ оператор:

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

Если вы хотите случай, чтобы соответствовать на что-либо, и есть ссылка на него, использовать имя переменной вместо подчеркивания

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