Scala强大的模式匹配机制,可以应用在switch语句、类型检查以及“析构”等场合。样本类对模式匹配进行了优化。这里介绍的是模式匹配的基本知识。
样本类(case class)
添加了case关键字的类便是样本类。例如
abstract class Expr
case class Var(name:String) extends Expr
case class Number(num:Double) extends Expr
case class UnOp(operator : String , arg : Expr) extends Expr
case class BinOp(operator : String , left : Expr , right : Expr) extends Expr
这种修饰符可以让Scala编译器自动为这个类添加一些语法糖的效果:
- 添加与类名一致的工厂方法。也就是说,可以写成Var("x")来构造Var对象,而不用new。
- 样本类参数列表中的所有参数隐式获得了val前缀,因此它被当作字段维护。
- 编译器为这个类添加了方法toString,hashCode和equals等方法。
模式匹配
模式匹配的例子如下:
def simplifyTop(expr : Expr) : Expr = expr match{
case UnOp("-" , UnOp("-" , e)) => e
case BinOp("+" , e , Number(0)) => e
case BinOp("*" , e , Number(1)) => e
case _ => expr
}
这里的match对应Java里的switch,但是写在选择器表达式之后。即:
选择器 match {备选项}。
一个模式匹配包含了一系列备选项,每个都开始于关键字case。每个备选项都包含了一个模式及一到多个表达式。箭头符号 => 隔开了模式和表达式。
Scala中匹配表达式可以被看作Java风格Switch的泛化。但有三点不同:
- match是Scala的表达式,始终以值作为结果;
- Scala的备选项表达式永远不会落入下一个case;
- 如果没有模式匹配,MatchError异常会被抛出。这意味着必须始终确信所有的情况都考虑到了,或者至少添加一个默认情况什么都不做。如 case _ =>
模式的种类
具体说,有这么几种匹配模式
常量模式
区分一些常量
def describe(x: Any) = x match {
case 5 => "five"
case true => "truth"
case "hello" => "hi!"
case Nil => "the empty list"
case _ => "something else"
}
match表达式通过以代码编写的先后次序尝试每个模式来完成计算。
变量模式
单纯的变量模式没有匹配判断的过程,只是把传入的对象给起了一个新的变量名。通常不会单独使用,而是在多种模式组合时使用,比如
List(1,2) match{ case List(x,2) => println(x) }
构造模式
它的存在使得模式匹配真正变得强大。它由名称及若干括号之内的模式构成。如BinOp("+" , e , Number(0))。这种模式对于树型递归数据尤其有用。下面的序列模式和元组模式也可以认为是构造模式的特例。
序列模式
可以像匹配样本类那样匹配List或Array这样的序列类型。同样的语法现在可以指定模式内任意数量的元素。如:
expr match{
case List(0 , _ , _ ) => println("found it")
case _ =>
}
如果想匹配一个不指定长度的序列,可以指定_*作为模式的最后元素。它能匹配序列中0到任意数量的元素。
元组模式
def tupleDemo(expr : Any) =
expr match {
case (a , b, c) => println("matched " + a + b + c)
case _ =>
}
类型模式
def generalSize(x : Any) = x match{
case s : String => s.length
case m : Map[_ , _] => m.size
case _ => 1
}
相关推荐
5. **Scala编程基础**: Scala语言引入了许多高级编程概念,如模式匹配、高阶函数、类型系统和 Actors 模型。使用IntelliJ IDEA的Scala插件,开发者可以方便地编写和调试这些特性,同时利用IDE提供的代码提示和错误...
- **函数式编程**: 它支持高阶函数、模式匹配等函数式编程特性。 - **静态类型**: 虽然Scala有自动类型推断功能,但它本质上仍然是一种静态类型的编程语言。 - **简洁**: 与Java相比,Scala通常需要更少的代码行...
6. **模式匹配**:Scala的模式匹配允许开发者在代码中解构复杂的对象和数据结构,使其能够优雅地处理多种情况。 7. **类型类**:类型类是一种在运行时发现和组合类型特性的设计模式,它允许在不使用传统继承的情况...
本课程内容涵盖多个关键概念,如模式匹配、样例类、隐式函数和异常处理及泛型,这些都是Scala语言强大特性的体现。 首先,Scala的模式匹配是一种强大的控制流构造,类似于Java中的switch语句,但更为灵活。它允许...
在使用Scala SDK时,开发者可以利用其强大的函数式编程特性,例如高阶函数、模式匹配、不可变数据结构等,同时也可以利用面向对象编程的特性,如类、对象和继承。Scala还支持类型推断,这意味着程序员不必总是显式地...
- **模式匹配**:通过模式匹配,可以对数据结构进行解构并根据不同的情况执行不同的操作。 - **案例类**:简化了模式匹配,它们自动提供unapply方法,用于匹配。 - **Actor模型**:Scala内建对Akka Actor的支持,...
1. **语言指南**:这部分详细解释了Scala的基本语法、控制结构、类与对象、函数、模式匹配等核心概念,是学习Scala语法的起点。 2. **标准库文档**:展示了Scala库中各种类和方法的API,包括集合库、并发工具、IO...
1. **基础语法**:Scala的基础语法与Java有很多相似之处,但也有其独特的特点,如模式匹配、高阶函数、类型推断和case类。文档会详细解释这些概念,帮助初学者快速上手。 2. **类型系统**:Scala有一个强大的静态...
7. **类型系统**:Scala拥有强大的类型系统,包括类型推断、模式匹配、高阶类型和抽象类型等,这使得编写安全且可维护的代码成为可能。 8. **面向对象编程**:Scala支持传统的类、继承、封装和多态性,同时也引入了...
共13页第15讲-Scala编程详解:面向对象编程之Trait 共14页第16讲-Scala编程详解:函数式编程 共14页第17讲-Scala编程详解:函数式编程之集合操作 共9页第18讲-Scala编程详解:模式匹配 共11页第19讲-Scala编程详解:...
4. 特性(Feature):Scala允许开发者使用模式匹配、匿名函数、case类和object来增强代码的可读性和表达力。此外,它还提供了 Actors 模型,用于并发编程,确保线程安全。 5. 集合库:Scala的标准库包含一个高效且...
- **函数式编程**:支持高阶函数、模式匹配等函数式编程特性,这些特性对于编写高效、可维护的Spark程序至关重要。 #### Spark与Scala的集成 - **环境搭建**: - **安装Scala**:确保Scala版本与Spark兼容。 - *...
它可能涵盖了变量声明、基本数据类型、类与对象、模式匹配、高阶函数、类型系统、特质(trait)等主题,这些都是Scala编程的基石。此外,这本书还可能深入到Akka框架的介绍,因为Akka是Scala中用于构建分布式、反应...
至于控制结构语句,Scala提供了if/else、for循环、while循环、do/while循环等,以及模式匹配等高级特性。例如: ```scala val score = 90 val grade = if (score >= 90) "A" else "B" for (i <- 1 to 5) println(i)...
4. **模式匹配**:Scala的模式匹配不仅用于case语句,还可以在变量声明、函数参数和解构赋值中使用,增强了代码的可读性和可维护性。 5. ** Actors模型**:在2.7.5版本中,Scala内置了Actors模型,这是一种并发编程...
3. **模式匹配**:Scala中的模式匹配是一种强大的控制流构造,可以用于解构复杂数据结构。例如,`case (a, b) => a + b` 是一个简单的模式匹配例子。 4. **高阶函数**:函数在Scala中是第一类公民,可以作为参数...
当Jdbi与Scala结合,我们可以利用Scala的强大特性,如模式匹配、类型推断等,来编写更加优雅的数据库访问代码。 在“jdbi-scala.zip”压缩包中,包含的“jdbi-scala-master”文件可能是一个Git仓库的主分支,通常...
Extractor是Scala中的一个核心概念,主要用于模式匹配。在这个“Scala专题教程 - Extractor”中,我们将深入探讨Extractor的工作原理、如何创建自定义Extractor以及它们在实际编程中的应用。 ### 1. Scala模式匹配 ...
通过结合 `scala-db-codegen`,开发者可以自动生成与数据库模式匹配的 Quill 模式,从而轻松地进行数据库操作。 标签中的 "code-generator" 和 "code-generation" 明确表示了这是一个代码生成工具。`scala-db-...
Scala程序设计(第2版)很可能详尽地介绍了Scala的基本语法、类与对象、模式匹配、高阶函数、类型系统、并发编程等核心概念,以及可能包含了一些新的语言特性或最佳实践。 **JAVA虚拟机多核编程实战** 这本书则关注...