Scala学习——模式匹配
scala模式匹配
1.基础match case(类似java里switch case,但功能强大些)
object MatchApp {
def main(args: Array[String]): Unit = {
val is = Array("a","b","c","d")
val i = is(Random.nextInt(is.length))//随机取数组中的一个值
i match {
case "a" => println("aaa")
case "b" => println("bbb")
case "c" => println("ccc")
case _ => println("没有此匹配")
}
}
2、带条件的模式匹配
package top.ruandb.scala.Course05
import scala.util.Random
object MatchApp {
def main(args: Array[String]): Unit = {
judgeGrade("jack","A")//非常好
judgeGrade("lucy","B")//好
judgeGrade("lucy","D")//lucy同学,该努力学习了
judgeGrade("jack","D")//同学,该努力学习了
}
def judgeGrade(name:String ,grade:String): Unit ={
grade match{
case "A" => println("非常好")
case "B" => println("好")
case "C" => println("一般")
case _ if(name == "lucy") => println(name+"同学,该努力学习了")//带条件筛选
case _ => println("同学,该努力学习了")
}
}
}
3、Array模式匹配
package top.ruandb.scala.Course05
import scala.util.Random
object MatchApp {
def main(args: Array[String]): Unit = {
greeting(Array("a"))//hi,a
greeting(Array("b","c" ,"d"))//hi.everyone
greeting(Array("a","b","c" ,"d"))//hi,a and others
greeting(Array("c" ,"d"))//hi,c d
}
def greeting(array:Array[String]): Unit ={
array match {
case Array("a") => println("hi,a")//匹配数组Array("a")
case Array(x,y) => println("hi,"+ x + " "+ y)//匹配两个元素的数组
case Array("a",_*) => println("hi,a and others")//匹配以a开头的数组
case _ => println("hi.everyone")
}
}
}
4、List模式匹配
package top.ruandb.scala.Course05
import scala.util.Random
object MatchApp {
def main(args: Array[String]): Unit = {
greeting(List("a"))//hi,a
greeting(List("b","c" ,"d"))//hi.everyone
greeting(List("a","b","c" ,"d"))//hi,a and others
greeting(List("c" ,"d"))//hi,c d
}
def greeting(list:List[String]): Unit ={
list match {
case "a"::Nil => println("hi,a")//匹配只含a的List
case x::y::Nil => println("hi,"+ x + " "+ y)//匹配两个元素的List
case "a"::tail => println("hi,a and others")//匹配以a开头的List
case _ => println("hi.everyone")
}
}
}
5、类型匹配
package top.ruandb.scala.Course05
import scala.util.Random
object MatchApp {
def main(args: Array[String]): Unit = {
matchType(1)//Int: 1
matchType("str")//String; str
matchType(Map("lucy"->18,"jack"->19,"kangkang"->99))//(lucy,18)(jack,19)(kangkang,99)
matchType(3.14)//其他类型
}
def matchType(obj:Any): Unit ={
obj match{
case x:Int =>println("Int: "+ x )
case s:String =>println("String; "+s)
case m:Map[_,_] => m.foreach(println)
case _ => println("其他类型")
}
}
}
6、异常处理
package top.ruandb.scala.Course05
object ExceptionApp {
def main(args: Array[String]): Unit = {
try{
val i = 100/0 //ArithmeticException
println(i)
}catch {
case e:ArithmeticException => println("分母不能为0")
case e:Exception => println(e.getMessage)
}finally {
println("用于释放资源,一定能执行")
}
}
}
7、class模式匹配
package top.ruandb.scala.Course05
import scala.util.Random
object MatchApp {
def main(args: Array[String]): Unit = {
caseClassMatch(Cto("lucy","99"))
caseClassMatch(Employee("jack","7"))
caseClassMatch(Others("kangkang"))
}
def caseClassMatch(person:Person): Unit ={
person match{
case Cto(name,floor) => println("hi,"+name +" "+ floor)
case Employee(name,floor) =>println("hi,"+name +" "+ floor)
case Others(name) => println("hi,"+name )
}
}
class Person
case class Cto(name:String,floor:String) extends Person
case class Employee(name:String,floor:String) extends Person
case class Others(name:String) extends Person
}
8、Some,None模式匹配
package top.ruandb.scala.Course05
import scala.util.Random
object MatchApp {
def main(args: Array[String]): Unit = {
getGrade("lucy")//your grade is A
getGrade("jack")//your grade is B
getGrade("kangkang")//without your score
}
val grades = Map("lucy"->"A","jack"->"B")
def getGrade(name:String): Unit ={
val grade = grades.get(name)
grade match{
case Some(grade) => println("your grade is "+ grade)
case None =>println("without your score")
}
}
}
Scala学习——模式匹配的更多相关文章
- Scala学习教程笔记三之函数式编程、集合操作、模式匹配、类型参数、隐式转换、Actor、
1:Scala和Java的对比: 1.1:Scala中的函数是Java中完全没有的概念.因为Java是完全面向对象的编程语言,没有任何面向过程编程语言的特性,因此Java中的一等公民是类和对象,而且只 ...
- Scala 学习之路(十一)—— 模式匹配
一.模式匹配 Scala支持模式匹配机制,可以代替swith语句.执行类型检查.以及支持析构表达式等. 1.1 更好的swith Scala不支持swith,可以使用模式匹配match...case语 ...
- scala学习之路一
所谓学习,那么首先就先简单介绍一下scala吧 1.scala的介绍 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性. Scal ...
- Scala学习资源
Scala学习资源: Scala官方网站:http://www.scala-lang.org/ Scala github:https://github.com/scala/scala Twitter ...
- 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习
下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...
- 机器学习(三)--- scala学习笔记
Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...
- 【Scala】Scala学习资料
Scala学习资料 java 树形 分类器_百度搜索 决策树分类器-Java实现 - CSDN博客 KNN分类器-Java实现 - CSDN博客 学习:java设计模式—分类 - 飞翔荷兰人 - 博客 ...
- Scala学习网址
scala学习网址为:https://twitter.github.io/scala_school/zh_cn https://www.zhihu.com/question/26707124
- Spark之Scala学习
1. Scala集合学习: http://blog.csdn.net/lyrebing/article/details/20362227 2. scala实现kmeans算法 http://www.t ...
随机推荐
- Tensor基础实践
Tensor基础实践 飞桨(PaddlePaddle,以下简称Paddle)和其他深度学习框架一样,使用Tensor来表示数据,在神经网络中传递的数据均为Tensor. Tensor可以将其理解为多维 ...
- YOLOvi(i=1,2,3,4)系列
YOLOvi(i=1,2,3,4)系列 YOLOv4论文链接:https://arxiv.org/pdf/2004.10934.pdf YOLOv4源码链接:https://github.com/Al ...
- python+selenium基础篇,弹窗处理
1.弹窗如下图所示 2.处理方法 from selenium.webdriver.common.action_chains import ActionChains#导入鼠标操作包 from selen ...
- Java 反射编程(上)
文章目录 反射的泛型就是用`? `来描述 反射与类的操作 (取得父类信息) 取得父类信息 1. 获得本类的包名称: 2. 取得父类的Class 对象 3. 取得父类接口 案例: 使用上述方法 反射与类 ...
- springboot——发送put、delete请求
在springmvc中我们要发送put和delete请求,需要先配置一个过滤器HiddenHttpMethodFilter,而springboot中,已经帮我们自动配置了,所以我们可以不用配置这个过滤 ...
- 报错:vmnet8设置中出现错误。子网IP和子网掩码不一致
报错:vmnet8设置中出现错误.子网IP和子网掩码不一致 设置子网IP时报错,如下图 同样的,写成192.168.0.0就没问题,如下图 总结: 这个虚拟网络编辑器是给添加网卡的,你添加vmnet8 ...
- 支持向量机(SVM)之硬阈值
支持向量机 ( support vector machine, SVM ) 是使用超平面来对给定的 p 维向量进行分类的非概率二元线性分类器. 一.超平面 ( hyperplane ) 在一个p维的输 ...
- CMD批处理(5)——自动以管理员身份运行批处理脚本
在日常运维工作中,为方便对windows用户进行系统安装或配置等,使用Windows自带的批处理(bat文件)是一种最为简单快速的方法. 批处理脚本不会默认已管理员身份运行,一般情况下,我会将脚本命名 ...
- 测试MySQL锁的问题
测试MySQL锁的问题 目录 测试MySQL锁的问题 1 Record Lock 2 Next-Key Lock 2 死锁测试 InnoDB支持三种行锁: Record Lock:单个行记录上面的锁 ...
- VScode如何设置模板字符串html标签自动补全
在学习Vue的过程中,很多时候都需要用到模板字符串,但是里面的html标签一个字符一个字符的去敲未免也太麻烦了吧,其实我们可以通过设置来实现在模板字符串中按Tab键快速补全html标签. 1.在VSC ...