logo头像
Snippet 博客主题

Scala-Match匹配

更好、更强大的switch


基本用法

scala的match不像java的switch一样一“不小心”就会掉入其它条件中

1
2
3
4
5
6
7
val c = "a"

c match {
case "+" => 1
case "-" => -1
case _ => 0 // 匹配其它任意条件
}

守卫条件

任意Boolean条件均可以作为守卫

1
2
3
4
5
6
7
8
val c = ""

c match {
case "+" => sign = 1
case "-" => sign = -1
case _ if Character.isDigit(c) =>
case _ =>
}

类型匹配

尽量用这种方式而不是isInstanceOf操作符,这里不需要执行asInstanceOf做类型转换,会自动进行绑定

1
2
3
4
5
6
obj match {
case x: Int => x
case s: String => Integer.parseInt(s)
case _: BigInt => Int.MaxValue
case _ => 0
}

匹配集合

数组、列表和元组均可以匹配

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 数组匹配
arr match {
case Array(0) => "0" // 包含0的数组
case Array(x, y) => x + " " + y // 任何带有两个元素的数组
case Array(0, _*) => "0 ..." // 任意以0开始的数组
case _ => ""
}

// 元组匹配
pair match {
case (0, _) =>
case (y, 0) =>
case _ =>
}

评论系统未开启,无法评论!