📅  最后修改于: 2023-12-03 15:05:04.956000             🧑  作者: Mango
Scala中的模式匹配是一种强大且灵活的特性,通常用于表达式、函数参数、类型匹配以及样例类等。
expression match {
case pattern1 => result1
case pattern2 => result2
...
case patternN => resultN
}
expression
是需要进行模式匹配的表达式。case
后面跟着匹配的模式和处理结果。=>
将模式和结果分隔开。case
可以使用 case _ =>
表示剩余所有情况不做处理。以下是一个简单的示例:
val x: Int = 3
x match {
case 1 => println("One")
case 2 => println("Two")
case _ => println("Other")
}
输出:
Other
Scala 中的类型匹配可以用于判断一个变量的类型。语法如下:
expression match {
case pattern1: Type1 => result1
case pattern2: Type2 => result2
...
case patternN: TypeN => resultN
}
这里的 Type
可以是任意类型,包括原生类型、对象类型、集合类型、函数类型等。
以下是一个简单的示例:
val x: Any = "Hello, World!"
x match {
case s: String => println(s)
case x: Int => println(x)
}
输出:
Hello, World!
在 Scala 中,样例类是一种特殊的类,可以自动生成伴生对象、 toString
、 equals
、 hashCode
等方法。在进行模式匹配时,常常使用样例类。
定义一个样例类的语法为:
case class MyClass(name: String, age: Int)
以下是一个简单的示例:
case class Person(name: String, age: Int)
val p: Person = Person("Alice", 22)
p match {
case Person("Bob", _) => println("This is Bob")
case Person(n, a) => println(s"This is $n, age is $a")
case _ => println("Unknown Person")
}
输出:
This is Alice, age is 22
Scala 中的列表是一种不可变的序列集合,可以使用 ::
操作符将元素加入列表头部。列表可以进行模式匹配,通常使用 Nil
和 ::
两种模式。
以下是一个简单的示例:
val list: List[Int] = List(1, 2, 3)
list match {
case Nil => println("Empty List")
case head :: tail => println(s"Head is $head, tail is $tail")
}
输出:
Head is 1, tail is List(2, 3)
以下是一个匹配数字的案例:
def matchNumber(x: Int): String = x match {
case 0 => "Zero"
case 1 => "One"
case 2 => "Two"
case _ => "Other"
}
println(matchNumber(1))
输出:
One
Scala 中的模式匹配是一项强大的功能,它可以用于各种情况,包括基本类型、集合类型、类和对象等。熟练地掌握模式匹配可以极大地提高 Scala 程序员的开发效率。