使用case类进行匹配
case类是用于与case表达式进行模式匹配的特殊类。从语法上讲,这些是带有特殊修饰符的标准类:case。试试下面的例子,这是一个使用case类的简单模式匹配示例。
object Demo {
def main(args: Array[String]) = {
val alice = new Person("Alice", 25)
val bob = new Person("Bob", 32)
val charlie = new Person("Charlie", 32)
for (person <- List(alice, bob, charlie)) {
person match {
case Person("Alice", 25) => println("Hi Alice!")
case Person("Bob", 32) => println("Hi Bob!")
case Person(name, age) => println(
"Age: " + age + " year, name: " + name + "?")
}
}
}
case class Person(name: String, age: Int)
}
尝试一下
输出-
Hi Alice!
Hi Bob!
Age: 32 year, name: Charlie?
添加case关键字会导致编译器自动添加许多有用的特性。case关键字表示在模式匹配中与大小写表达式的关联。首先,编译器自动将构造函数参数转换为不可变字段(vals)。val关键字是可选的。如果需要可变字段,请使用var关键字。因此,我们的构造函数参数列表现在更短了。其次,编译器自动为类实现equals、hashCode和toString方法,这些方法使用指定为构造函数参数的字段。因此,我们不再需要自己的toString()方法。最后,Person类的主体变成空的,因为没有需要定义的方法!