美文网首页
scala学习笔记-模式匹配

scala学习笔记-模式匹配

作者: cclucc | 来源:发表于2019-11-15 19:47 被阅读0次
模式匹配

要理解模式匹配(pattern-matching),先把这两个单词拆开,先理解什么是模式(pattern),这里所的模式并不是设计模式里的模式,而是数据结构上的,这个模式用于描述一个结构的组成,类似正则

  • 常量模式(包括常量变量和常量字面量)
  • 变量模式
  • 通配符模式
  • 构造器模式(用构造器匹配一个对象,怎么实现??)
  • 类型模式
  • 变量绑定模式

2、怎么实现模式匹配的?
在面向对象的程序中数据被组织为一级一级的类(class),面向对象语言在模式匹配方面的问题在于如何从外部探测这个层级。

  • 面向对象的分解 (decomposition)
  • 访问器模式 (visitor)
  • 类型测试/类型造型 (type-test/type-cast)
  • typecase
  • 样本类 (case class)
    本质上case class是个语法糖,对你的类构造参数增加了getter访问,还有toString, hashCode, equals 等方法;
    最重要的是帮你实现了一个伴生对象,这个伴生对象里定义了apply 方法和 unapply 方法。 apply方法是用于在构造对象时,减少new关键字;而unapply方法则是为模式匹配所服务。
  • 抽取器 (extractor)

3、模式匹配的核心就是解构
4、模式匹配应用

赋值语句

List(1,List(2,3,4,5,6,7)) match { case List(_, x@List(2,_*)) => println(x.size) }//构造器+变量绑定匹配

val (a,b) = (100,200)//构造器+变量绑定

val 2=2//常量匹配

//是否所有的赋值语句都是模式匹配呢?
val a=123 //无模式匹配

for语句

for(i <- List(1,2,3) ) {println(i)}
for(i@2 <- List(1,2,3) ) {println(i)

5、自定义抽取器

//List的序列模式(sequence pattern)可以支持对前边若干元素的匹配,比如:List(1,2,3,_*),如果想要实现 List(_*, lastEle) 这样的形式,就需要通过自定义一个抽取器来实现了
// 自定义Extractor
object Append {
    // 接受List结构
    def unapply[A] (l: List[A]) = {
        // 返回Tuple2:前边的若干元素和最后一个元素
        Some( (l.init, l.last) )
    }
}

(1 to 9).toList match{ case _ Append 9 => println("OK") }

相关文章

  • Scala学习笔记(八) 模式匹配

    1. 模式匹配简介 模式匹配是 Scala 的重要特性之一,前面两篇笔记Scala学习笔记(六) Scala的偏函...

  • scala学习笔记-模式匹配

    模式匹配 要理解模式匹配(pattern-matching),先把这两个单词拆开,先理解什么是模式(pattern...

  • Scala模式匹配及偏函数

    模式匹配公式: 一、代码Demo 二、Scala中的模式匹配处理异常 三、Scala函数

  • Case Class与模式匹配

    模式匹配入门 在java语言中存在switch语句,例如: 上述scala代码展示了如何使用scala中的模式匹配...

  • scala模式匹配

    以下是常见的scala模式匹配实例。 variableName @ pattern 下面这个示例 模式匹配中cas...

  • scala模式匹配

    1.scala是匹配和java中的switch的区别: ...

  • scala 模式匹配

    scala的模式匹配与java的switch case相似,但是switch case只能对值进行判断,scala...

  • Scala 模式匹配

    样本类 case class 类前加上case修饰符,编译器会添加额外的语法,更好的支持模式匹配 添加与类名称相同...

  • Scala 模式匹配

    一、模式匹配基本使用 说明: => 后的代码可以写多行且不用 { } 模式匹配也是表达式,所以它也可以赋值给一个变...

  • scala模式匹配

    基本类型模式匹配 数组匹配 List匹配 类型匹配 case匹配 Some | None匹配

网友评论

      本文标题:scala学习笔记-模式匹配

      本文链接:https://www.haomeiwen.com/subject/uunkuctx.html