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 ...
随机推荐
- Google Pixel 超分辨率--Super Resolution Zoom
Google Pixel 超分辨率--Super Resolution Zoom Google 的Super Res Zoom技术,主要用于在zoom时增强画面细节以及提升在夜景下的效果. 文章的主要 ...
- Git 快速控制
Git 快速控制 聊聊学习 Git 那些事 现在回想起来,其实接触 Git 的时候是在大一的时候表哥带入门的.当时因为需要做一个项目,所以他教如何使用 Git 将写好的代码推送到 GitHub 上,然 ...
- TensorRT 7.2.1 开发概要(上)
TensorRT 7.2.1 开发概要(上) Abstract 这个TysRR7.2.1开发者指南演示了如何使用C++和Python API来实现最常用的深层学习层.它展示了如何使用深度学习框架构建现 ...
- 【VBA】查找字符串
老婆饼里有老婆吗 Sub test() aaa = "老婆饼里有老婆吗" If InStr(aaa, "老婆") <> 0 Then Debug.p ...
- 【Azure 机器人】微软Azure Bot 编辑器系列(2) : 机器人/用户提问回答模式,机器人从API获取响应并组织答案 (The Bot Framework Composer tutorials)
欢迎来到微软机器人编辑器使用教程,从这里开始,创建一个简单的机器人. 在该系列文章中,每一篇都将通过添加更多的功能来构建机器人.当完成教程中的全部内容后,你将成功的创建一个天气机器人(Weather ...
- Transformers for Graph Representation
Do Transformers Really Perform Badfor Graph Representation? microsoft/Graphormer: This is the offici ...
- npm ERR! Unexpected end of JSON input while parsing near '...'解决方法
npm install时出现npm err! Unexpected end of JSON input while parsing near'...'错误 输入 npm cache clean -- ...
- 《面试补习》- Java集合知识梳理
一.ArrayList ArrayList 底层数据结构为 动态数组 ,所以我们可以将之称为数组队列. ArrayList 的依赖关系: public class ArrayList<E> ...
- Unity不规则按钮点击区域(UGUI)
文章目录 一. 前言 二. 最终效果 三. 实现 1.创建UICamera 2. UIPolygon节点 3. 编辑碰撞区域 5. 运行测试 6. UIPolygon代码 一. 前言 游戏开发中,可能 ...
- pod生命周期
Pod生命周期 我们一般将pod对象从创建至终这段时间范围成为pod的生命周期,它主要包含以下的过程: pod创建过程 运行初始化容器(init container)过程 运行主容器(main con ...