接下来会讲解关于各种模式匹配,从中就会知道模式匹配的重要性

关于Type、Array、List、Tuple模式解析

  1.Type模式匹配代码解析

    //关于Type类型的模式匹配
//匹配 Int类型、string类型、Map类型[_,_]代表任意类型的k,v
def match_type(t : Any) = t match {
case p : Int => println("It is Integer")
case p : String => println("It is String, the content is : " + p)
case m: Map[_, _] => m.foreach(println)
case _ => println("Unknown type!!!")
}
match_type(2)
match_type("Spark")
match_type(Map("Scala" -> "Spark"))

  2.Array模式匹配代码解析

    //关于Array模式匹配
def match_array(arr : Any) = arr match {
//匹配数组数据第一个为0
case Array(0) => println("Array:" + "0")
//匹配数组两个数字
case Array(x, y) => println("Array:" + x + " " +y)
case Array(0, _*) => println("Array:" + "0 ...")
case _ => println("something else")
}
match_array(Array(0))
match_array(Array(0,1))
match_array(Array(0,1,2,3,4,5))

  3.List模式匹配代码解析

    //匹配list类型数据 用::来匹配
def match_list(lst : Any) = lst match {
case 0 :: Nil => println("List:" + "0")
case x :: y :: Nil => println("List:" + x + " " + y)
case 0 :: tail => println("List:" + "0 ...")
case _ => println("something else")
}
match_list(List(0))
match_list(List(3,4))
match_list(List(0,1,2,3,4,5))

  4.Tuple,模式匹配代码解析

    //tuple模式匹配 -->tuple模式是比较随意的
def match_tuple(tuple : Any) = tuple match {
case (0, _) => println("Tuple:" + "0")
case (x, 0) => println("Tuple:" + x )
case _ => println("something else")
} match_tuple((0,"Scala"))
match_tuple((2,0))
match_tuple((0,1,2,3,4,5))

关于Scala中提取器Extractor解析

  1.Extractor实战解析

  2.Extractor源码解析:提取器就好比apply函数一样,获取用户的

    //提取器就是获取函数中参数 从中获取数据  -->数组的模式匹配就是提取器获取数据
def match_array(arr : Any) = arr match {
case Array(0) => println("Array:" + "0")
case Array(x, y) => println("Array:" + x + " " +y)
case Array(0, _*) => println("Array:" + "0 ...")
case _ => println("something else")
} match_array(Array(0))
match_array(Array(0,1))
match_array(Array(0,1,2,3,4,5)) //正则式与模式匹配结合形成了一个函数就获取匹配出的数值与字符
val pattern = "([0-9]+) ([a-z]+)".r
"20150628 hadoop" match {
case pattern(num, item) => println(num + " : " + item)
}

Case class和Case object代码解析

  1.Case class代码解析:模式匹配中使用case class和case object中消息传递中用的比较多,能够根据业务进行消息的发送

  2.Case object代码解析:可以理解为单例模式

object case_class_object {
def main(args: Array[String]): Unit = {
//定义一个模式匹配
def caseOps(person: Person) = person match {
case Student(age) => println("I am " + age + "years old")
case Worker(_, salary) => println("Wow, I got " + salary)
case Shared => println("No property")
}
caseOps(Worker(1,19))
caseOps(Student(19))
caseOps(Shared) //因为继承时候会发现参数都是常量-->需要改变的时候可以复制对象进行改变
val worker = Worker(29, 10000.1)
val worker2 = worker.copy(salary = 19.95)
val worker3 = worker.copy(age = 30)
}
}
//case class object在消息传输过程中起很重要地位
//抽象类
abstract class Person
//继承抽象类 带有Int类型的常量
case class Student(age: Int) extends Person
//继承抽象类 带有Int类型与double的常量
case class Worker(age: Int, salary: Double) extends Person
//继承抽象类 --object
case object Shared extends Person

模式匹配高级实战:嵌套的Case class

  1.嵌套的Case class解析:在匹配模式中参数也使用case class和caseobject

  2.Case object实战解析

def main(args: Array[String]): Unit = {
//定义一个模式匹配 case class
def caseclass_nested(person: Item) = person match {
//匹配项中第一二个参数可以不计,第三课参数用art代替Book对象用@符号引用类似也这样
case Bundle(_, _, art @ Book(_, _), rest @ _*) => println(art.description + " : " + art.price)
case Bundle(_, _, Book(descr, _), _*) => println("The first description is :" + descr)
case _ => println("Oops!")
}
//调用定义的模式匹配
caseclass_nested(Bundle("1111 Special's", 30.0,Book("Scala for the Spark Developer", 69.95),
Bundle("Hadoop", 40.0,Book("Hive", 79.95),Book("HBase", 32.95))))
caseclass_nested(Bundle("1212 Special's", 35.0, Book("Spark for the Impatient", 39.95)))
}
}
abstract class Item
case class Book(description: String, price: Double) extends Item
//继承抽象类,并且参数中嵌套了抽象类 -->这就是类中嵌套类
case class Bundle(description: String, price: Double, items: Item*) extends Item

就讲这么多了,明天继续....

希望大家关注王家林老师的视频,本系列也是从他的视频中学习的,他是微信号(18610086859)

百度云地址:http://pan.baidu.com/s/1kTw4Idp

大数据系列修炼-Scala课程08的更多相关文章

  1. 大数据系列修炼-Scala课程01

    简介 由于本人刚毕业,也是从事软件开发相关的工作.想再学习一下关于大数据.移动互联网.云计算相关的技术.为我的未来打好基础.并且从零开始学习大数据相关的知识,脚踏实地的走好每一步,听行业前辈说毕业生刚 ...

  2. 大数据系列修炼-Scala课程03

    前言 今天上班看了很多关于前端js,jQuery.bootstrap.js以及springMVC看得迷迷糊糊的,毕竟以前很少去学习前端的技术,所有看得有点困,还好看得比较多,回家后也开始学习关于Sca ...

  3. 大数据系列修炼-Scala课程07

    由于昨天下班后有点困,就没有来及写博客,今天会把它补上!把这个习惯坚持下去! 关于Scala高阶函数详解 1.Scala高阶函数代码实现:高阶函数就是在我们函数中套用函数 2.高阶函数代码详解:高阶函 ...

  4. 大数据系列修炼-Scala课程06

    关于Scala中的正则表达式与模式匹配结合的正则表达式Reg 正则表达式的实现:正则表达式的定义与其它语言差不多,只需在表达式后加一个.r,并且可以遍历相应的表达式进行匹配 //定义的正则表达式 va ...

  5. 大数据系列修炼-Scala课程04

    Scala中继承实现:超类的构造.字段重写.方法重写 关于超类的构建:超类可以在子类没有位置的限制,可以在子类中调用父类的方法 类中字段重写:在重写字段前面加一个override就可以重新赋值 类中方 ...

  6. 大数据系列修炼-Scala课程02

    Scala数组操作实战详解 接着昨天的课程,下面我们继续学习关于Scala数组操作详解.Scala数组的定义 //数组定义 //定长数组格式 /** * val arrayName = new Arr ...

  7. 大数据系列修炼-Scala课程11

    接着昨天的list,也是学习集合的相关知识 ListBuffer.ArrayBuffer.Queue.stack相关操作 1.ListBuffer.ArrayBuffer代码实现:ListBuffer ...

  8. 大数据系列修炼-Scala课程10

    今天主要是关于Scala中对List的相关操作,list在Scala中应该是至关重要,接下来会讲解关于List的一系列操作 List的map.flatMap.foreach.filter操作讲解 1. ...

  9. 大数据系列修炼-Scala课程05

    Scala多重继承.构造器的执行顺序.AOP实现 多重继承的trait实现:Scala中接口可以继承具体的类,trait接口可以实现多重继承,并且某个类也可以继承特定的类,在继承后面可以混入,接口的实 ...

随机推荐

  1. iOS8数字键盘加左下角完成button

    iOS8数字键盘加左下角完成button的核心代码如下面: - (void)addDoneButtonToNumPadKeyboard { UIButton *doneButton = [UIButt ...

  2. [WebGL入门]二十四,补色着色

    注:文章译自http://wgld.org/,原作者杉本雅広(doxas),文章中假设有我的额外说明,我会加上[lufy:],另外,鄙人webgl研究还不够深入,一些专业词语,假设翻译有误,欢迎大家指 ...

  3. JAVA学习JSTL与EL

    一.基础 1.EL(Expression Language):为了使jsp写起来更加简单,提供了在Jsp中简化表达式的方法 2.JSTL:(JSP Standard Tag Library)jstl标 ...

  4. SignalR与ActiveMQ

    SignalR与ActiveMQ结合构建实时通信   一.概述 本教程主要阐释了如何利用SignalR与消息队列的结合,实现不同客户端的交互 SignalR如何和消息队列交互(暂使用ActiveMQ消 ...

  5. [LeetCode119]Pascal's Triangle II

    题目: Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [ ...

  6. nyoj 7 街区最短路径问题 【数学】

    找出横纵坐标的中位数,怎么找:先对x排序找x的中位数x0,再对y排序找y的中位数y0:最后统计各点到中位数点(x0, y0)的总距离: 街区最短路径问题 时间限制:3000 ms  |  内存限制:6 ...

  7. 3、采用Gradle创Libgdx工程

    (原文链接:http://www.libgdx.cn/topic/20/3-%E4%BD%BF%E7%94%A8gradle%E5%88%9B%E5%BB%BAlibgdx%E9%A1%B9%E7%9 ...

  8. hdu 1226 BFS + bfs记录路径

    http://acm.hdu.edu.cn/showproblem.php? pid=1226 为了节省空间.您可以使用vis初始化数组初始化-1. 发现BFSeasy错了地方 始一直WA在这里:就是 ...

  9. IOS-QQ登陆之苹果程序流程

    1.新建项目,通过main函数循环执行代码,直到应用被关闭. 2.点击项目,建立storyboard文件,并在info文件夹中指定第一个storyboard文件 3.建立Controller文件. 组 ...

  10. 《Javascript权威指南》13号学习笔记:使用日期和时间

    一.创Date示例 1.Date类的方法和属性是非常不静,故,申请书Date属性和方法之前.必须创建Date类的实例. var date = new Date();  //以当前日期和时间创建实例. ...