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的设计吸收借鉴了许多种编程语言的思想,具备面向对象编程.函数式编程等特性 ...
随机推荐
- 教你如何用ps制作紫色光斑效果
1.新建800x800画布 2.设置前景色和背景色分别为#b38adb ,#212121;执行"滤镜"-"渲染"-"云彩"操作 3.执行&q ...
- python 数据可视化 -- 生成可控的随机数据集合
生成可控的随机数据集合 使用 numpy.random 模块 numpy.random.random(size=None) 返回 [0.0, 1.0) 区间的随机 floats, 默认返回一个 fl ...
- angular的一些东西
每个人都知道在使用angular的时候只能有一个ng-app指令但是也可以手动创建,这样就可以写很多个模块 例: var app=angular.module('App',[]);var app1=a ...
- ubuntu16.04安装tensorflow1.3
总结 : 1.点软件个更新-系统更新2.降级gcc到5.33.装CUDA及第二个包,加入PATH4.CUDNN5.Ancada..6.TF Ubuntu16.04 的GCC版本降级 http://bl ...
- 大前端学习笔记【七】关于CSS再次整理
如果你在日常工作中使用 CSS,你的主要目标可能会重点围绕着使事情“看起来正确”.如何实现这一点经常是远不如最终结果那么重要.这意味着比起正确的语法和视觉结果来说,我们更少关心 CSS 的工作原理. ...
- uiautomatorviewer报错“Error taking device screenshot: EOF” ,
uiautomatorviewer报错“Error taking device screenshot: EOF” ,千万不要装手机助手,不要装手机助手,不要装手机助手 uiautomatorview ...
- es6剩余参数
function show(a,b,...args){ console.log(a) console.log(b) console.log(args) } show(10,20,30,30,36)
- JavaScript -DOM 编程艺术 2nd 完
今日看完了这本书,做完了最后一个综合性例子.说实话收获良多,终于明白前端-h5 具体做什么 越学习越无知,这个看来真是一个真理. 后期计划: 1.CSS + DIV 布局深入了解,重点实战 2.Jav ...
- 09-JS的事件流的概念(重点)
在学习jQuery的事件之前,大家必须要对JS的事件有所了解.看下文 事件的概念 HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件.页面的滚动事件onscroll等等,可以 ...
- java面试一、1.5JVM
免责声明: 本文内容多来自网络文章,转载为个人收藏,分享知识,如有侵权,请联系博主进行删除. 1.5.JVM JVM运行时内存区域划分