9.1 匹配字面量和常量

在actor间传递消息,通常用的是String字面量、数字或是元组。如果消息是字面量,只需要键入想匹配的字面量,就完成了。假设我们要根据一周的不同日期确定行动。假定我们以String表示日期,根据日期确定行动。下面是一个如何对日期进行模式匹配的例子:

PatternMatching/MatchLiterals.scala

  1. def activity(day: String) {
  2. day match {
  3. case "Sunday" => print("Eat, sleep, repeat... ")
  4. case "Saturday" => print("Hangout with friends... ")
  5. case "Monday" => print("...code for fun...")
  6. case "Friday" => print("...read a good book...")
  7. }
  8. }
  9. List("Monday", "Sunday", "Saturday").foreach { activity }

match是一个对Any起作用的表达式。在这个例子里,我们用它处理String。它会对目标执行模式匹配,根据匹配模式的值调用合适的case表达式。上面代码的输出如下:

  1. ...code for fun...Eat, sleep, repeat... Hangout with friends...

字面量和常量可以直接匹配。字面量可以是不同的类型;match并不关心。不过,match左边的目标对象的类型也许会对类型有所限制。在上面的例子里,因为它是字符串类型,所以可以匹配的是任意字符串。

case表达式并不限于在match语句里使用。这里,包含case表达式的代码块就是一个简单函数值。