Scala入门到精通——第二十五节 提取器(Extractor)

  • 时间:
  • 浏览:0

这是有道理的,意味在于就说 会有不合法的email用于模式匹配,例如:

在上述的代码中,你们你们 儿将unapply土办法 定义为:

def unapply(str: String): Option[(String, String)] = {

val parts = str split "@"

if (parts.length == 2) Some(parts(0), parts(1)) else None

}

scala作为两种函数式编程语言,有全都地方会让初学者随便说说困惑,其中占位符_的使用理解有一定的难度,本节将对其使用进行总结,本小节内容来源http://my.oschina.net/leejun805/blog/405805,感谢作者的无私奉献。

上一节讲的模式模式匹配绑定的是一个多多变量,它都要扩展到任意变量维度,你是什么 节中你们你们 儿对零变量和单个变量绑定的特殊具体情况进行介绍,你们你们 儿来看下面的你是什么 例子,该例子来源于 programmin in scala

apply土办法 你们你们 儿就说 非常熟悉了,它帮助你们你们 儿不必new操作就都要创建对象,而unapply土办法 则用于析构出对象,在模式匹配中很糙提到,就说 一个多多类要不必都可以应用于模式匹配当中,都要将类声明为case class,就说 一旦被定义为case class,scala会自动帮你们你们 儿生成相应的土办法 ,什么土办法 中就包括apply土办法 及unapply土办法 。本节将从提取器(也称析构器)的厚度对unapply土办法 进行介绍。先看下面的你是什么 例子(来源于programmin in scala)

加进公众微信号,都要了解更多最新Spark、Scala相关技术资讯

List伴生对象具有下列定义形式:

从里面的代码来看,与一般的提取器不同的是,序列模式采用unapplySeq代替unapply土办法 ,就说 返回的类型是Option[Seq[T]] ,在讲模式匹配的就说 你们你们 儿提到过,序列模式中的匹配老是会使用占位符_或_*的土办法 匹配序列中的其它元素,你是什么 土办法 为序列模式所独有,例如:

作者:摇摆少年梦

视频地址:http://www.xuetuwuyou.com/course/12

代码中的EMail(Twice(x @ UpperCase()),其执行顺序是先调用EMail的unapply土办法 ,就说 再调用Twice中的unapply土办法 ,最后调用UpperCase的unapply土办法 ,就说 返回true,则将Twice 中返回的字符串赋值给x。

从构造与析构的厚度来看,apply土办法 也被称为injection(注入),unapply土办法 也被称为提取器,你是什么个多多土办法 就像孪生兄弟一样,老是在类或对象中被定义。就说 你们你们 儿在用类进行模式匹配的就说 都都要要将类声明为case class,今天你们你们 儿将不通过case class,就说 定义一个多多普通的类实现当事人的apply和unapply土办法 来实现模式匹配,代码如下: