案例类提取器
一个情况下类是与很多标准样板代码自动包含的类。这样做的一个好处是 Scala 可以很容易地将提取器与 case 类一起使用。
case class Person(name: String, age: Int) // Define the case class
val p = Person("Paola", 42) // Instantiate a value with the case class type
val Person(n, a) = p // Extract values n and a
// n: String = Paola
// a: Int = 42
在这个时刻,n
和 a
都是程序中的 val
s,可以这样访问:据说它们是从 p 中提取的。继续:
val p2 = Person("Angela", 1337)
val List(Person(n1, a1), Person(_, a2)) = List(p, p2)
// n1: String = Paola
// a1: Int = 42
// a2: Int = 1337
在这里我们看到两件重要的事情
- 提取可以在深层级别进行:可以提取嵌套对象的属性。
- 并非所有元素都需要提取。通配符
_
字符表示该特定值可以是任何值,并被忽略。没有创建val
。
特别是,这可以轻松匹配集合:
val ls = List(p1, p2, p3) // List of Person objects
ls.map(person => person match {
case Person(n, a) => println("%s is %d years old".format(n, a))
})
在这里,我们有代码使用提取器来明确检查 person
是一个 Person
对象并立即拉出我们关心的变量:n
和 a
。