`

scala学习笔记(十五):模式匹配

阅读更多

   模式匹配在spark中非常重要,你可以在很多地方能看见模式匹配

  

 def main(args: Array[String]): Unit = {
    // trigger the constant patterns
    println(echoWhatYouGaveMe(0))
    println(echoWhatYouGaveMe(true))
    println(echoWhatYouGaveMe("hello"))
    println(echoWhatYouGaveMe(Nil))
    
    println(echoWhatYouGaveMe(List(1,2,3)))
    println(echoWhatYouGaveMe(List(1,2)))
    println(echoWhatYouGaveMe(Vector(1,2,3,4)))
    
    println(echoWhatYouGaveMe((1,2)))
    println(echoWhatYouGaveMe((1,2,3)))
    
    println(echoWhatYouGaveMe(Dogs("kkk")))
    
    println("sum ="+sum(List(1,2,3,4,5)))
    println("multiply ="+multiply(List(1,2,3,4,5)))
    
    println(toInt("11"))
    
    copyFile("D:\\spark.txt", "D:\\spark1.txt")
  }
  
  def echoWhatYouGaveMe(x :Any) = x match {
    //常量匹配 constant patterns
      case 0 => "zero"
      case true => "true"
      case "hello" => "you said 'hello'"
      case Nil => "an empty List"
      
    //序列匹配 sequence patterns
      case List(1,a,b) => s"a three-element list with 0 as the first element second $a three $b"
      case List(1,_*) => "a list beginning with 1, having any number of elements"
      case Vector(1,_*)=> "a vector starting with 1, having any number of elements"
    
    //元组 tuples 
      case (a, b) => s"got $a and $b"
      case (a, b, c) => s"got $a, $b, and $c"
     
    //构造器 constructor patterns 
      case Person(first, "Alexander") => s"found an Alexander, first name = $first"
      case Dogs("Suka") => "found a dog named Suka"
    
    //typed patterns
      case s: String => s"you gave me this string: $s"
      case i: Int => s"thanks for the int: $i"
      case f: Float => s"thanks for the float: $f"
      case a: Array[Int] => s"an array of int: ${a.mkString(",")}"
      case as:Array[String] => s"an array of strings: ${as.mkString(",")}"
      case d: Dogs => s"dog: ${d.name}"
      case list: List[_] => s"thanks for the List: $list"
      case m: Map[_, _] => m.toString
    //default
      case _ => "Unknown"
  }
  //How to use Lists in Scala match expressions List最后一个元素是Nil,所以在case的时候一定要加Nil匹配
  def sum(list:List[Int]):Int = list match{
    case Nil => 0
    case x :: rest => x + sum(rest)
  }
  
  def multiply(list:List[Int]):Int = list match{
    case Nil => 1
    case x :: rest => x * multiply(rest)
  }
  
  //模式匹配最显著的例子就是异常捕捉
  def openAndReadAFile(filename:String) = {
    try {
        val lines = Source.fromFile(filename).getLines()
        for(line <- lines){
          println(line)
        }
    } catch {
      case t: FileNotFoundException => t.printStackTrace() 
      case e: IOException  => println("Had an IOException trying to read that file")
    }
  }

 

分享到:
评论

相关推荐

    scala学习笔记整理

    在"scala学习笔记整理"中,我们可以深入探讨以下关键知识点: 1. **基础语法**:Scala的基础语法与Java有相似之处,但也有很多独特的特点。例如,它支持变量的不可变性(immutability),使用`val`声明常量,`var`...

    scala学习资料

    5. 特性与模式匹配:Scala支持特性(trait),这是一种轻量级的抽象类型,可以用来实现多重继承。模式匹配是Scala的一个强大特性,可以用于解构复杂的数据结构,简化条件判断和数据处理。 6. 高级语法:Scala的语法...

    Scala-学习资料-mht.rar

    它的语法与Java类似,但更加强调代码的表达性和简洁性,通过模式匹配、高阶函数等特性,使代码更加可读和易于维护。 1. 类型系统:Scala的类型系统非常强大,支持静态类型检查,同时也允许隐式转换和类型推断,这...

    scala讲解笔记 入门及进阶 PDF文档1-5

    此外,还会介绍Scala中的模式匹配,这是Scala语言的一大特色,使得代码更加简洁和高效。 第二部分:"Scala入门及进阶-part02-类和对象.pdf" 主要讲解Scala的面向对象特性。这部分内容会详细介绍类的创建、对象的...

    scala学习笔记

    - **模式匹配**:使用 `case` 语句进行模式匹配,可以应用于多种场景,如解析数据结构、异常处理等。 - **隐式转换**:通过 `implicit` 关键字定义隐式转换规则,可以在编译时自动转换类型。 - **延迟初始化**:使用...

    尚硅谷_韩顺平_Scala语言核心编程_PDF密码解除1

    - **模式匹配**:Scala的模式匹配功能可以用于解构复杂数据结构,简化代码。 - ** Actors模型**:Scala内置了对Akka框架的支持,方便构建并发和分布式系统。 5. **Scala开发环境搭建**: - **Windows**:在...

    学习scala好的项目

    在学习过程中,理解Scala的类型推断和模式匹配也是关键。类型推断能让编译器自动确定变量的类型,提高代码的可读性和简洁性。模式匹配则是一种强大的工具,用于解构复杂数据结构并根据其结构执行不同的操作。 总的...

    scala-learn:scala学习笔记

    本教程“scala-learn:scala学习笔记”旨在帮助初学者深入理解Scala的基础知识,同时也为有经验的程序员提供了一个复习和提升的平台。 1. **基础语法与数据类型** Scala的基础语法简洁而强大,包括变量声明(val和...

    scala的操作笔记

    - **模式匹配**:Scala支持强大的模式匹配功能,可用于字符串、类型以及复杂的数据结构。 - **样例类**:样例类是Scala中一种特殊的类,主要用于模式匹配。它们自动实现了许多有用的特性,如`equals`、`hashCode`和`...

    scala笔记:学习scala时的笔记

    - 模式匹配是Scala中的一个核心特性,它允许我们根据值的不同形式进行不同的操作,常用于解构复杂数据结构。 - 使用`case`关键字创建匹配模式,如`case class`实例、数组、集合等。 3. **函数与高阶函数**: - ...

    Scala-Tutorial:Scala语法学习笔记与程式码范例from 韩顺平老师教学

    8. 模式匹配:用于处理数据结构,如case class和枚举。例如: ```scala sealed trait Color case object Red extends Color case object Green extends Color case object Blue extends Color val color = Red ...

    scala-with-cats:scala with cats一书的笔记,习题

    此外,Scala还引入了模式匹配、高阶函数、类型推断等特性,提供了更高级的抽象工具。 Cats库是Scala中的一个关键部分,它提供了一套丰富的类型类,如Functor、Applicative、Monad等,这些类型类定义了常见的操作,...

    Testing in Scala-带书签目录超清文字版.pdf

    1. **Scala基础**:首先,书籍可能会介绍Scala的基础语法,如类型系统、模式匹配、高阶函数和类、特质等,这些都是编写测试代码的基础。 2. **Scala测试框架**:Scala社区中有多个流行的测试框架,如ScalaTest、...

    scala_fp_coursera:https的演示

    **Scala FP Coursera课程:深入理解函数式编程** Scala是一种多范式编程语言,...在提供的`scala_fp_coursera-master`压缩包中,可能包含了课程的笔记、代码示例和练习,这些都是深入学习Scala函数式编程的宝贵资源。

    scala与spark基础

    这个压缩包中的"spark---scala学习"文件很可能是Scala和Spark相关的学习资料,包括笔记、教程或者示例代码,对于初学者来说是一份宝贵的资源。建议仔细阅读和实践其中的内容,以便更好地掌握这两个工具。

    Scala_day01_scala_

    "Scala_day01_scala_" 的标题暗示了这是一份针对初学者的Scala学习资料,旨在帮助新接触者快速入门。下面,我们将深入探讨Scala的一些核心概念和特性。 首先,Scala的基础语法与Java类似,但它提供了更简洁的表达...

    spark学习笔记

    ### Spark学习笔记 #### Apache Spark简介 Apache Spark是一款专为大规模数据处理而设计的高性能、通用的计算引擎。它的核心特点在于提供了强大的内存计算能力,从而显著提升了数据处理的速度。Spark最初采用Scala...

    Scala、Groovy++、Stackless Python、Erlang 学习笔记及分享

    学习Scala,你需要理解其静态类型的特性、模式匹配、 Actors模型以及类型系统,包括高阶函数、特质(traits)和不可变数据结构。 Groovy是另一种基于JVM的动态编程语言,它的语法简洁,易于阅读和编写。Groovy与...

    Scala-notes:小号

    这暗示着这份资料可能来源于一个开源项目,或者是一个组织良好的学习资源,包含按章节或主题划分的Scala学习笔记和练习。 在深入探讨Scala的知识点时,我们可以关注以下几个核心领域: 1. **类型系统**:Scala拥有...

    快学Scala 第2版.zip

    2. **类型系统**:Scala的强类型特性,类型推断,模式匹配,以及如何定义和使用自定义类型。 3. **面向对象编程**:类、对象、继承、封装和多态的概念,以及Scala中的特质(trait)及其在多继承中的作用。 4. **...

Global site tag (gtag.js) - Google Analytics