`

学习scala笔记--24 模式匹配

 
阅读更多

 

 

 

 

模式匹配

 

match{ case v => code}

匹配到一个就终止  不需要类似 java中的 break

 

 

scala> def judeGrade(grade:String){

     | grade match{

     |    case "A" => println("excellent")

     |    case "B" => println("good")

     |    case "C" => println("just so so")

     |    case _ => println(" need study hard")

     | }

     | }

judeGrade: (grade: String)Unit

 

scala> judeGrade("A")

excellent

 

scala> judeGrade("B")

good

 

scala> judeGrade("C")

just so so

 

 

scala> judeGrade("D")

 need study hard

 

scala> judeGrade("E")

 need study hard

 

scala> 

 

 

 

 

case 中可以 使用 if 守卫

 

scala> def judeGrade(grade:String,name:String){

     |  grade match {

     |     case "A" => println("very good")

     |     case "B" => println(" good ")

     |     case "C" => println(" ok ")

     |     case _grade if name=="tom" => println(name + " you need work hard")

     |     case _grade if name=="jam" => println(name + " u also need work hard")

     |     case _ => println(" not vary bad ")

     | }

     | }

judeGrade: (grade: String, name: String)Unit

 

scala> judeGrade("A","")

very good

 

scala> judeGrade("B","")

 good 

 

scala> judeGrade("C","")

 ok 

 

scala> judeGrade("D","")

 not vary bad 

 

scala> judeGrade("D","jeff")

 not vary bad 

 

scala> judeGrade("D","tom")

tom you need work hard

 

scala> judeGrade("D","jam")

jam u also need work hard

 

scala> judeGrade("C","jam")

 

 

 

 

 

 

注意下面的  case _g     使用变量

 

scala> def judeGrade(grade:String,name:String){

     | grade match {

     |      case "A" => println("very good")

     |      case "B" => println(" good ")

     |      case "C" => println(" ok ")

     |      case _grade if name=="tom" => println(name + " you need work hard")

     |      case _grade if name=="jam" => println(name + " u also need work hard")

     |      case _g => println("your grade is "+_g +" not vary bad ")

     | }

     | }

judeGrade: (grade: String, name: String)Unit

 

scala> judeGrade("D","jam")

jam u also need work hard

 

scala> judeGrade("E","jam")

jam u also need work hard

 

scala> judeGrade("E","")

your grade is E not vary bad 

 

scala> judeGrade("F","")

your grade is F not vary bad 

 

 

 

----------------------------------

 

 

 对类型进行匹配

 

  case 变量:类型 => 代码

  

  

  scala> def judeGradeType(v:Any){

     |  v match {

     |   case x : Int => println(" --int--")

     |   case x : String => println("--string--")

     |   case _ => println("--other--")

     | }

     | }

judeGradeType: (v: Any)Unit

 

scala> judeGradeType("Hello")

--string--

 

scala> judeGradeType(123)

 --int--

 

scala> judeGradeType(1.0)

  

----------------------------------

 

匹配 Array

 

scala> def matchArray(arr:Array[Any]){

     | arr match{

     |  case Array(0) => println("0")

     |   case Array(x,y) => println(" x , y")

     |   case _ => println("--")

     |  }

     |  }

matchArray: (arr: Array[Any])Unit

 

scala> matchArray(Array(1,0,2))

--

 

scala> matchArray(Array(0))

0

 

scala> matchArray(Array(x,y))

<console>:13: error: not found: value x

       matchArray(Array(x,y))

                        ^

<console>:13: error: not found: value y

       matchArray(Array(x,y))

                          ^

 

scala> matchArray(Array("x","y"))

 x , y

 

scala> matchArray(Array("x","y","d"))

--

 

 

 

----------------------------------

 

 

匹配 数组以什么开头

 

scala> :paste

// Entering paste mode (ctrl-D to finish)

 

 

def matchArray(arr:Array[Any]){

arr match{

  case Array(0) => println("0")

  case Array(x,y) => println(" x , y")

  case Array(0,_*)=> println(" begin with 0 ")

}

}

 

// Exiting paste mode, now interpreting.

 

matchArray: (arr: Array[Any])Unit

 

scala> matchArray(Array(0,2,4,5))

 begin with 0 

 

 

 ----------------------------------

 

 

 

 

 匹配  List

 

 

scala> :paste

// Entering paste mode (ctrl-D to finish)

 

def matchArray(arr : List[Any]){

 arr match{

case 0 :: Nil => println("0")

case x::y:: Nil => println(x +"" + y)

case 0::tail => println("0....")

case _ => println("other")

}

}

 

// Exiting paste mode, now interpreting.

 

matchArray: (arr: List[Any])Unit

 

scala> matchArray(List(0))

0

 

scala> matchArray(List(0,1,3))

0....

 

scala> matchArray(List("x","y"))

xy

 

scala> matchArray(List("x","y","z"))

other

 

----------------------------------

  

 变量声明中的模式

 

 

 scala> var (x,y)=(1,2)

x: Int = 1

y: Int = 2

 

scala> x

res19: Int = 1

 

scala> y

res20: Int = 2

分享到:
评论

相关推荐

    Scala-学习资料-mht.rar

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

    scala学习笔记整理

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

    学习scala好的项目

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

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

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

    scala学习资料

    - 特性与模式匹配:学习如何使用特性来解决多重继承问题,以及如何运用模式匹配进行数据解析。 - 并发编程:了解Scala如何利用函数式编程特性实现并发和分布式计算。 - Scala与其他技术的结合:如Spark、Akka等,...

    Scala详细总结(精辟版++)

    - **函数式编程**:Scala同时也是一个成熟的函数式编程语言,支持高阶函数、模式匹配等功能。 - **类型推断**:Scala具有强大的类型推断机制,这使得开发者可以在很多情况下省略类型声明。 - **模式匹配**:提供了一...

    scala的操作笔记

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

    scala学习笔记

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

    scala-learn:scala学习笔记

    Scala的模式匹配功能强大,允许你根据值的不同形态执行不同的操作。这种特性在处理数据结构和解析输入时非常有用。 5. **集合框架** Scala的集合库是其一大亮点,提供了丰富的数据结构,如List、Set、Map等,并且...

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

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

    scala笔记:学习scala时的笔记

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

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

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

    scala-impatient-notes

    与Java不同,Scala的类可以有默认构造器和主构造器,通过`case class`关键字可以创建模式匹配友好的类。 2. 函数是一等公民:Scala中,函数可以赋值给变量、作为参数传递、作为返回值,这使得函数式编程成为可能。 ...

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

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

    spark学习笔记

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

    scala与spark基础

    1. Scala语法基础:包括变量声明、函数定义、类和对象、模式匹配、高阶函数等。 2. Spark核心概念:理解RDD、DataFrame/Dataset,以及如何进行转换和行动操作。 3. Spark SQL:学习如何使用DataFrame API进行数据...

    SCALA从入门到精通个人笔记含代码

    模式匹配 函数式编程基础 函数式编程说明 函数定义/声明 函数运行机制 递归 函数注意事项和细节 过程 惰性函数和异常 面向对象编程初级 类和对象 包 包对象 面向对象编程中级 封装 继承 多态 面向对象...

    Scala-notes:小号

    7. **模式匹配**:Scala的模式匹配允许我们解构复杂数据结构,如case class,增强了代码的可读性和简洁性。 8. **元编程**:Scala的反射和类型系统允许在运行时检查和操作类型,以及创建动态代码,增加了编程的灵活...

    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 ...

    udemy-scala-course

    学习这个课程,学员不仅可以了解Scala的基本语法和面向对象编程,还能接触到函数式编程的概念,如高阶函数、模式匹配和不可变数据结构。此外,由于Scala在大数据处理框架如Spark中的广泛应用,学员还将了解到如何...

Global site tag (gtag.js) - Google Analytics