【scala】模式匹配
2024-08-27 03:48:24
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表达式会返回值,每个选项都打印出一个值。
最新文章
- iOS 视图与视图层次结构(内容根据iOS编程)
- 实现带有getMin的栈
- offie2010设置前两页和后面显示不同页码的方法
- Find Successor &; Predecessor in BST
- LINQ to SQL 增,删,改
- PNG 文件结构
- 前端开发之css篇
- OS X第三方类库管理工具cocoapods入门
- 模板引擎(smarty)知识点总结三
- 浅析B/S架构数据库连接方式
- Codeforces Round #539 Div1 题解
- 【Core】.NET Core 部署在Linux
- SQL-记录删除篇-007
- git shell 命令大全
- HTML里用如何包含引用另一个html文件 .
- 什么是restful api
- Django时间时区问题(received a naive datetime while time zone support is active)
- 高通平台读写nv总结【转】
- TensorFlow上实践基于自编码的One Class Learning
- log4php0.9的详细配备实例说明