Scala Match
来源:互联网 发布:软件设计师考试教程 编辑:程序博客网 时间:2024/05/18 01:44
Scala中的match类似与Java中的switch case结构。在理解match之前,记住scala中,几乎一切都是表达式。
匹配值
val times = 1 //> times : Int = 1 times match { case 1 => "one" case 2 => "two" case _ => "some other number" } //> res0: String = one val timeEnglish = times match { case 1 => "one" case 2 => "two" case _ => "some other number" } //> timeEnglish : String = one
可以看到,中间部分的times …其实是作为一个表达式存在的,因此我们可以把结果付给timeEnglish这个变量。其中下划线_表示其他未匹配的内容,类似与Java中的default。
我们也可以根据待匹配得知做条件判断:
times match { case i if i == 1 => "one" case i if i == 2 => "two" case _ => "some other number"}
case后面先给待匹配的值取个别名,便于做条件判断。
匹配类型
除了根据值匹配外,还可以根据类型匹配:
def bigger(o: Any): Any = { o match { case i: Int if i < 0 => i - 1 case i: Int => i + 1 case d: Double if d < 0.0 => d - 0.1 case d: Double => d + 0.1 case text: String => text + "s" }}
匹配类实例
def calcType(calc: Calculator) = calc match { case _ if calc.brand == "hp" && calc.model == "20B" => "financial" case _ if calc.brand == "hp" && calc.model == "48G" => "scientific" case _ if calc.brand == "hp" && calc.model == "30B" => "business" case _ => "unknown"}
这里的条件判断中直接使用待匹配的变量名calc。整个match表达式的值就作为方法的返回值。
但是这样比较很繁琐啊,因此scala提供了特殊的类叫case class,这类class专门为match case准备。
case class
使用关键字case 和class定义case类:
case class Calculator(brand: String, model: String)
case类实例化的时候可以不用new关键字:
Calculator("Kosio" , "HH") //> res0: test.Calculator = Calculator(Kosio,HH)
case类可以像正常类一样定义方法。
使用case class做match的时候,就很方便了:
val hp20b = Calculator("hp", "20B")val hp30b = Calculator("hp", "30B")def calcType(calc: Calculator) = calc match { case Calculator("hp", "20B") => "financial" case Calculator("hp", "48G") => "scientific" case Calculator("hp", "30B") => "business" case Calculator(ourBrand, ourModel) => "Calculator: %s %s is of unknown type".format(ourBrand, ourModel)}
最后偶一个case匹配前面都没有匹配到的情况,也可以这么写:
case Calculator(_, _) => "Calculator of unknown type"
甚至可以不关心他时不时Calculator:
case _ => "Calculator of unknown type"
或者我们可以将匹配的值重新绑定到另一个名字:
case c@Calculator(_, _) => "Calculator: %s of unknown type".format(c)
0 0
- scala------match
- Scala Match
- scala match的运用
- scala中的match详解
- 【Scala】Scala中的match、case模式匹配
- scala学习笔记:match表达式
- Scala 模式匹配 match-case
- Scala-match case 正则用法
- Scala中的case match语法
- Scala模式匹配(match)使用
- Scala中的模式匹配match
- scala基础语法-match模式匹配
- scala学习笔记:match与unapply()
- scala 学习(十八)——match
- Scala的try表达式和match表达式
- scala学习之内建控制结构->匹配(match)表达式
- 【scala 匹配模式】match case|case class |::|:::|=>用法
- 云星数据---Scala实战系列(精品版)】:Scala入门教程036-Scala实战源码-Scala match语句01
- Android单元测试的配置
- XML使用总结(二)
- Switch Fall Through
- 过滤器
- LeetCode207. Course Schedule
- Scala Match
- leetcode 103. Binary Tree Zigzag Level Order Traversal
- iOS学习之 plist文件的读写
- 基础算法-直接选择排序
- android学习开始之旅
- 调取系统相机
- PHP每日学习日志——运算符
- C++学习日志第三篇
- SpringMVC学习系列(3) 之 URL请求到Action的映射规则