分部函数匹配的对象引用是什么



以这个函数为例:

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)
}

相关内容

  • 没有找到相关文章

最新更新