📜  Scala模式匹配(1)

📅  最后修改于: 2023-12-03 15:05:04.956000             🧑  作者: Mango

Scala模式匹配

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 中,样例类是一种特殊的类,可以自动生成伴生对象、 toStringequalshashCode 等方法。在进行模式匹配时,常常使用样例类。

定义一个样例类的语法为:

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 程序员的开发效率。