Scala的模式匹配是通过match表达式从若干可选项中选择,类似Java中的switch。

例子:

val firstArg = if(args.length>0) args(0) else ""
firstArg match{
case "salt" => println("pepper");
case "chips" => println("salsa");
case "eggs" =>println("bacon");
case _ => println("huh?"); //缺省的样例以 _ 表示
}

如果我们要访问匹配的输入参数使用unexpected来访问

val colorNum = 4;
val colorStr = colorNum match{ //将匹配后的结果保存在colorStr中
case 1 => "red"
case 2 => "green"
case 3 => "yellow"
case unexpected => unexpected + "is Not Allowed"
   //unexpected代表colorNum=4
}

我们还可以在匹配中使用“守卫”,也就是if来添加一些必要的处理逻辑。

for(elem <- List(1,2,3,4)){
elem match{
case _ if(elem %2 ==0) => println(elem + " is even.")
case _ => println(elem+" is odd.")
}
}

注意,上例我们使用的是 case _ if 的意思是所有的elem都进来,然后进行if的判断。

其实我们常见的map遍历也是使用了模式匹配。

val map = Map("zhang" -> 1,"yu" -> 2,"hang" -> 3);
for((k,v) <- map){//遍历map
println("("+k+","+v+")");
}

我们还可以使用case类来优化用于模式匹配的类。

case class Car(brand:String,price:Int){
val myBYDCar = new Car("BYD",10000);
val myBMWCar = new Car("BWM",20000);
val myBENZCar = new Car("BENZ",30000);
for(car <- List(myBYDCar,myBMWCar,myBENZCar)){
car match {
case Car("BYD",10000) => println("BYD's price is "+car.price)
case Car("BWM",20000) => println("BMW's price is "+car.price)
case _ => println("BENZ's price is "+car.price)
}
}
}

Scala的match表达式跟JAVA的switch的区别

  1.Scala是任何常量、字符串等都可以用作样例,JAVA的case语句只支持整型、枚举和字符串常量。

  2.Scala中break是隐含的,不用直接写,JAVA需要写。

  3.Scala的match表达式会返回值,每个选项都打印出一个值。

最新文章

  1. iOS 视图与视图层次结构(内容根据iOS编程)
  2. 实现带有getMin的栈
  3. offie2010设置前两页和后面显示不同页码的方法
  4. Find Successor &amp; Predecessor in BST
  5. LINQ to SQL 增,删,改
  6. PNG 文件结构
  7. 前端开发之css篇
  8. OS X第三方类库管理工具cocoapods入门
  9. 模板引擎(smarty)知识点总结三
  10. 浅析B/S架构数据库连接方式
  11. Codeforces Round #539 Div1 题解
  12. 【Core】.NET Core 部署在Linux
  13. SQL-记录删除篇-007
  14. git shell 命令大全
  15. HTML里用如何包含引用另一个html文件 .
  16. 什么是restful api
  17. Django时间时区问题(received a naive datetime while time zone support is active)
  18. 高通平台读写nv总结【转】
  19. TensorFlow上实践基于自编码的One Class Learning
  20. log4php0.9的详细配备实例说明

热门文章

  1. 【我的Android进阶之旅】解决Android Studio启动时报错:Java 1.8 or later is required.
  2. 学习笔记のsendRedirect &amp;forward
  3. HDFS各个进程存储在磁盘上的数据含义和注意事项
  4. Spark 1.5新特性介绍
  5. java要注意的问题1
  6. Poj 1755Triathlon 未Ac,先mark
  7. netty应用
  8. SSO 单点登录的实现原理
  9. $用ConfigParser模块读写conf配置文件
  10. 运维必备技能 WEB 日志分析