This commit is contained in:
罗祥
2019-06-04 10:35:13 +08:00
parent d09ca11daa
commit 52a294dbe6
8 changed files with 75 additions and 77 deletions

View File

@ -98,18 +98,18 @@ object ScalaApp extends App {
### 1.4 提取器
数组、列表和元组能使用模式匹配,都是依靠提取器(extractor)机制它们伴生对象中定义unapplyunapplySeq方法
数组、列表和元组能使用模式匹配,都是依靠提取器(extractor)机制,它们伴生对象中定义`unapply``unapplySeq`方法:
+ unapply方法用于提取固定数量的对象;
+ unapplySeq用于提取一个序列
+ **unapply**用于提取固定数量的对象;
+ **unapplySeq**用于提取一个序列;
以下是`Array.scala`类源码中定义`unapplySeq`方法:
这里以数组为例,`Array.scala`定义`unapplySeq`方法:
```scala
def unapplySeq[T](x : scala.Array[T]) : scala.Option[scala.IndexedSeq[T]] = { /* compiled code */ }
```
`unapplySeq`返回一个序列值,即数组中的以和模式匹配case语句中的表达式进行对应位置的值匹配
`unapplySeq`返回一个序列,包含数组中的所有值,这样在模式匹配时,才能知道对应位置的值。
@ -138,7 +138,7 @@ case class Student(name: String, age: Int) extends Person {}
- 构造器中每个参数都默认为`val`
- 自动地生成`equals, hashCode, toString, copy`等方法;
- 伴生对象中自动生成`apply`方法使得不用new关键字就能构造出相应的对象
- 伴生对象中自动生成`apply`方法,使得可以不用new关键字就能构造出相应的对象
- 伴生对象中自动生成`unapply`方法,以支持模式匹配。
除了上面的特征外,样例类和其他类相同,可以任意添加方法和字段,扩展它们。