SCALA程序设计 第五章:模式匹配

简介: SCALA程序设计 模式匹配

1、Switch例子:

 

val v1=1
    v1 match  {
      case 1=> "1"
      case 2=> "2"
      case _=> "123"
    }

   case_与default等效,如果没有模式匹配,抛出MatchError,case中不用break。match可以使用任何类型,不仅仅是数字。

2、守卫:像if表达式一样,match也提供守卫功能,守卫可以是任何Boolean条件。

3、模式中的变量:如果case关键字后面跟着一个变量名,那么匹配的表达式会被赋值给那个变量。scala中变量必须以小写字母开头,常量用大写字母,如果常量用小写字母开头需要加反引号。

4、类型模式:类型匹配时,必须设置一个变量名,匹配操作发生在运行期,不能比对一个泛型类型,但可以使用通配符。对数组来说,类型信息保存完好,可以匹配Array[Int].

5、匹配数组、列表和元组

   1)匹配数组、列表:

       Array(0)匹配只有一个元素且为0的数组。

       Array(x,y)匹配数组有两个元素,并将两个元素赋值为x和y。

       Array(0, _*)匹配数组以0开始。

 

   2)匹配元组:集合元素通过匹配绑定到变量,这样的操作较"析构"。

6、提取器:模式如何匹配数组、列表和元组,这个背后的机制叫做提取器,一个对象如果带有从对象中提取的unapply和unapplySeq方法,apply方法接受构造参数,生成对象;而unapply方法接受对象,提取值,是一个反向操作。

   注意:如果要提取单个值,则应该返回一个目标类型Option,例如:

Option[Int]

,而不是

Option[(Int)]

;无参数的提取器可以用Boolean检查。

7、变量声明中的模式:在变量声明中使用模式,例如:

val (x,y) = (1,2)

8、for表达式中的模式:for表达式可以使用提取器。

   注意:for会忽略失败的匹配。

9、样例类:是类,除此之外它是为模式匹配而优化的类,样例类用case关键字进行声明,当声明样例类时,几件事自动发生:

   1)构造器中的每一个参数都成为val--除非它被显式地声明为var(不建议这样做)

   2)在半生对象中提供apply方法让你不用new关键字就能够造出相应的对象,比如:Dollar(29.95)或Currency(29.95,"EUR")

   3)提供unapply方法让模式匹配可以工作。

   4)将生成toString、equals、hashCode和copy方法--除非显式地给出这些方法的定义。

   除上述外,样例类和其它类完全一样,可以添加方法和字段扩展等等。

10、copy方法和带名参数:copy创建一个与现有对象值相同的新对象,并可以通过带名参数来修改某些属性。

11、case语句的中置表达式:如果unapply方法产出一个元组,你可以在case语句中使用中置表达法。

12、匹配嵌套结构:样例类经常被用于嵌套结构。

13、密封类:如果想让case类的所有子类都必须在申明该类的相同的文件中定义,可以将样例类的通用超类声明为sealed,叫做密封类,密封就是外部用户不能在其他文件中定义子类。

14、模拟枚举:样例类可以模拟出枚举类型。

15、偏函数:不处理所有可能的输入,之处理那些能与至少一个case语句匹配的输入。在偏函数中只能使用case语句,整个函数必须用{}包围。普通的函数可以用{}和()包围;如果偏函数被调用,而函数的输入却与所有语句都不匹配,

系统会抛出一个MatchError运行时错误。可以用isDefineAt方法测试特定输入是否与偏函数匹配,避免错误。


相关文章
|
Scala
166 Scala 模式匹配和样例类
166 Scala 模式匹配和样例类
102 0
|
3月前
|
Java Scala
Scala 模式匹配
Scala 模式匹配
44 3
|
7月前
|
Scala 开发者
Scala中的模式匹配与高阶函数:探索强大的编程范式
【7月更文挑战第11天】Scala中的模式匹配和高阶函数是两种极其强大的特性,它们不仅提升了代码的表达力和可读性,还使得开发者能够编写出更加灵活和可重用的解决方案。通过
|
8月前
|
Scala
scala-模式匹配(字符串、数组、元组、集合、类、偏函数)
scala-模式匹配(字符串、数组、元组、集合、类、偏函数)
38 0
|
9月前
|
Scala
Scala中的异常处理和模式匹配
Scala中的异常处理和模式匹配
69 1
|
9月前
|
Scala
Scala中的模式匹配:强大的匹配和转换工具
Scala中的模式匹配:强大的匹配和转换工具
67 1
|
9月前
|
分布式计算 Java 大数据
Scala:样例类、模式匹配、Option、偏函数、泛型(三)
Scala:样例类、模式匹配、Option、偏函数、泛型(三)
93 0
|
分布式计算 Java Scala
scala中的模式匹配和样例类
scala有一个十分强大的模式匹配机制,可以应用到很多场合。java switch caseswitch语句类型查询以及快速获取数据并且scala还提供了样例类,对模式匹配进行了优化,可以快速进行匹配。
99 0
scala中的模式匹配和样例类
|
Java 大数据 Scala
大数据开发基础的编程语言的Scala的模式匹配和正则
Scala是一种支持模式匹配和正则表达式的编程语言,它提供了强大的字符串处理和数据解析功能。本文将介绍Scala中模式匹配和正则表达式的概念和用法,帮助开发者更好地理解和应用这门语言。
99 0
|
安全 Java 编译器
Scala快速入门-10-模式匹配与样例类
mathch表达式是一个更好的switch,不会有穿透到下一个分支的问题 如果没有模式能够匹配,会抛出MatchError,可以用case _ 模式来避免,相当于Java中的default 模式可以包含一个随意定义的条件,称做守卫 可以匹配数组、列表、元组等模式,然后将匹配到不同部分绑定到变量 样例类及密封类的模式匹配 用Option来存放可能存在也可能不存在的值,比null更安全