9.2 匹配通配符
在上面的例子里,我们并没有处理day
所有可能的值。如果有一个值,与case
表达式里的任何一个都不匹配,会得到一个MatchError
异常。把参数做成enum
,而非String
,就可以控制day
的取值。即便如此,我们可能依然不想处理一周的每个日期。使用通配符,就可以避免抛出异常:
PatternMatching/Wildcard.scala
object DayOfWeek extends Enumeration {
val SUNDAY = Value("Sunday")
val MONDAY = Value("Monday")
val TUESDAY = Value("Tuesday")
val WEDNESDAY = Value("Wednesday")
val THURSDAY = Value("Thursday")
val FRIDAY = Value("Friday")
val SATURDAY = Value("Saturday")
}
def activity(day: DayOfWeek.Value) {
day match {
case DayOfWeek.SUNDAY => println("Eat, sleep, repeat...")
case DayOfWeek.SATURDAY => println("Hangout with friends")
case _ => println("...code for fun...")
}
}
activity(DayOfWeek.SATURDAY)
activity(DayOfWeek.MONDAY)
上面的代码里,为一周的日期定义了一个枚举。在Scala里可以使用Java的enum
。不过用的时候就要像上面这样,从scala.Enumeration
继承出一个单例对象。在activity()
方法里,我们匹配了SUNDAY
和SATURDAY
,用通配符(由下划线(_
)表示)处理剩下的日期。
运行这段代码,先匹配SATURDAY
,接着由通配符匹配MONDAY
:
Hangout with friends
...code for fun...