Scala - 快速学习07 - 模式匹配
简单匹配
def color(num: Int): String = {
val colorNum = num
val colorStr = colorNum match {
case 1 => "red"
case 2 => "green"
case 3 => "yellow"
//case _ => "Not Allowed" //通配其他条件
case unexpected => unexpected + " is Not Allowed" //可以在模式匹配的case语句中使用变量
}
s"$colorStr" //函数的返回值
} //> color: (num: Int)String
color(1) //> res0: String = red
color(5) //> res1: String = 5 is Not Allowed
类型模式
for (elem <- List(9, 12.3, "Spark", "Hadoop", 'Hello)) {
val str = elem match {
case i: Int => i + " is an int value."
case d: Double => d + " is a double value."
case "Spark" => "Spark is found."
case s: String => s + " is a string value."
case _ => "This is an unexpected value."
}
println(str)
} //> 9 is an int value.
//| 12.3 is a double value.
//| Spark is found.
//| Hadoop is a string value.
//| This is an unexpected value.
"守卫(guard)"语句
for (elem <- List(1, 2, 3, 4)) {
elem match {
case _ if (elem % 2 == 0) => println(elem + " is even.")
case _ => println(elem + " is odd.")
} //> 1 is odd.
//| 2 is even.
//| 3 is odd.
//| 4 is even.
}
for表达式中的模式
val test = Map(111 -> "AAA", "22" -> "BB", '3' -> 'c')
//> test : scala.collection.immutable.Map[Any,Any] = Map(111 -> AAA, 22 -> BB, 3
//| -> c)
for ((k, v) <- test) printf("Key is : %s and value is: %s\n", k, v)
//> Key is : 111 and value is: AAA
//| Key is : 22 and value is: BB
//| Key is : 3 and value is: c
case类的匹配
case class Car(brand: String, price: Int)
val myBMWCar = new Car("BMW", 1200000) //> myBMWCar : TestScala.Car = Car(BMW,1200000)
val myBenzCar = new Car("Benz", 1500000) //> myBenzCar : TestScala.Car = Car(Benz,1500000)
for (car <- List(myBMWCar, myBenzCar)) {
car match {
case Car("BMW", 1200000) => println("Hello, BMW!")
case Car(brand, price) => println("Brand:" + brand + ", Price:" + price + ", do you want it?")
} //> Hello, BMW!
//| Brand:Benz, Price:1500000, do you want it?
}
Option类型
- Option类的子类Some,当存在可以被引用的值的时候,可以使用Some来包含这个值
- None则被声明为一个对象,而不是一个类,表示没有值。
- Option类型的getOrElse方法,可以在Option是Some的实例时返回对应的值,是None的实例时返回传入的参数。
- Option[T]类型中的T可以是Sting或Int或其他各种数据类型。
- Option[T]实际是一个特殊的集合,要么只包含一个元素(被包装在Some中返回),要么就不存在元素(返回None)。
- 可以针对Option[T]使用map、foreach或者filter等集合的方法。
val books = Map("AAA" -> 111, "BBB" -> 222, "CCC" -> 333)
//> books : scala.collection.immutable.Map[String,Int] = Map(AAA -> 111, BBB ->
//| 222, CCC -> 333)
books.get("AAA") //> res0: Option[Int] = Some(111)
books.get("DDD") //> res1: Option[Int] = None
val sales = books.get("BBB") //> sales : Option[Int] = Some(222)
books.get("BBB").getOrElse("No Such Book - BBB")//> res2: Any = 222
books.get("DDD").getOrElse("No Such Book - DDD")//> res3: Any = No Such Book - DDD
books.get("CCC").foreach(println) //> 333
books.get("DDD").foreach(println)
注意:
Scala - 快速学习07 - 模式匹配的更多相关文章
- Scala - 快速学习05 - 数据结构
1- 数组(Array) 数组一般包括定长数组和变长数组. 可以不指明数组类型,Scala会自动根据提供的初始化数据来推断出数组的类型. 在Scala中,对数组元素的应用,是使用圆括号,而不是方括号. ...
- scala快速学习笔记(二):控制结构,类和对象
IV.控制结构 1.if/else 除基本用法外,if/else语句能用来赋值,进而代替?:运算符.这得益于在Scala中,每个语句块都有值,就是该语句块最后一个语句的值.请看下面的代码. def a ...
- Scala - 快速学习09 - 函数式编程:一些操作
1- 集合类(collection) 系统地区分了可变的和不可变的集合. scala.collection包中所有的集合类 可变集合(Mutable) 顾名思义,意味着可以修改,移除或者添加一个元素. ...
- Scala - 快速学习08 - 函数式编程:高阶函数
函数式编程的崛起 函数式编程中的“值不可变性”避免了对公共的可变状态进行同步访问控制的复杂问题,能够较好满足分布式并行编程的需求,适应大数据时代的到来. 函数是第一等公民 可以作为实参传递给另外一个函 ...
- Scala - 快速学习06 - 面向对象
1- 类 1.1- 简介:类.方法及对象 类是用来创建对象的蓝图. Scala文件中包含的多个类之间,都是彼此可见的,不需要声明为public. 创建对象 定义好类以后,就可以使用new关键字来创建对 ...
- Scala - 快速学习04 - 求值策略
表达式求值策略(Evaluation Strategy) Scala中所有的运算都是基于表达式的. Call By Value - 对函数实参求值,且仅求值一次:函数调用之前对所有表达式进行求值 Ca ...
- Scala - 快速学习03 - 基础语法
1- 变量 变量 mutable variable 在程序运行过程中其值可能发生改变的量 关键词var定义变量,定义时直接进行求值 常量 immutable variable 在程序运行过程中其值不会 ...
- Scala - 快速学习02 - 搭建开发环境
1- 下载与安装 下载链接:http://www.scala-lang.org/download/ CMD To run Scala from the command-line, simply dow ...
- Scala - 快速学习01 - Scala简介
Scala简介 Scala(Scalable Language)是一门多范式(multi-paradigm)编程语言,Scala的设计吸收借鉴了许多种编程语言的思想,具备面向对象编程.函数式编程等特性 ...
随机推荐
- 服务管理之mysql基础
目录 mysql基础 1. 关系型数据库介绍 1.1 数据结构模型 1.2 RDBMS专业名词 2. mysql安装与配置 2.1 mysql安装 2.2 mysql配置 3. mysql的程序组成 ...
- experiment 3
#include <stdio.h> int main() { int number, max, min, n; n=; printf("请输入%d个数: ", n); ...
- PostgreSQL uuid
--执行一 create extension "uuid-ossp" --执行二 select uuid_generate_v4()
- 基于STM32L4的开源NBIOT开发资料
基于STM32L4的开源NBIOT开发资料 1. 参考路径:http://www.stmcu.org/module/forum/forum.php?mod=viewthread&tid=615 ...
- python3 tkinter添加图片和文本
在前面一篇文章基础上,使用tkinter添加图片和文本.在开始之前,我们需要安装Pillow图片库. 一.Pillow的安装 1.方法一:需要下载exe文件,根据下面图片下载和安装 下载完 ...
- vue,react,angular
一.Vue.js: 其实Vue.js不是一个框架,因为它只聚焦视图层,是一个构建数据驱动的Web界面的库. Vue.js通过简单的API(应用程序编程接口)提供高效的数据绑定和灵活的组 ...
- git撤销commit-hard
场景: 不小心commit了一个不应该commit的修改,但是还没有push,想撤销那个commit 命令: a)git log b)git reset --hard commit_id 具体步骤如下 ...
- vue el-upload form 同时提交
项目需要form 表单和文件上传同时在一个请求,废话不多说上代码: 上传的组件使用pug格式 .row.my-4 .col-12 el-form(:model='domain', :rules='va ...
- STM32CubeMX HAL库串口+DMA数据发送不定长度数据接收
参考资料:1.ST HAL库官网资料 2.https://blog.csdn.net/u014470361/article/details/79206352#comments 一.STM32CubeM ...
- LAPM 相关实验01
目录 lab1 静态.动态资源的区别lab2 部署phpMyadminlab3 部署wordpresslab4 编译安装php-Xcache加速器lab5 fcgi实现lamp lab1 静态.动态资 ...