部分函数匹配的对象的引用是什么?
What is the reference of the object that a partial function matches on?
以这个函数为例:
def receive = {
case "test" => log.info("received test")
case _ => log.info("received unknown message")
}
匹配的对象是什么?在箭头的右侧,我如何引用匹配的对象?
你可以用 if-guard:
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 foo@Foo(s) => println(foo.s) // could've referred to just "s" too
case _ => println("other")
}
Option(Foo("test")).map(receive) // prints "test"
如果您希望大小写匹配任何内容并引用它,请使用变量名而不是下划线
def receive = {
case "test" => log.info("received test")
case other => log.info("received unknown message: " + other)
}
以这个函数为例:
def receive = {
case "test" => log.info("received test")
case _ => log.info("received unknown message")
}
匹配的对象是什么?在箭头的右侧,我如何引用匹配的对象?
你可以用 if-guard:
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 foo@Foo(s) => println(foo.s) // could've referred to just "s" too
case _ => println("other")
}
Option(Foo("test")).map(receive) // prints "test"
如果您希望大小写匹配任何内容并引用它,请使用变量名而不是下划线
def receive = {
case "test" => log.info("received test")
case other => log.info("received unknown message: " + other)
}