Scala语言入门四(模式匹配)

简介: Scala中的模式匹配讲解

Scala 提供了强大的模式匹配机制,应用也非常广泛。一个模式匹配包含了一系列备选项,每个都开始于关键字 case。每个备选项都包含了一个模式及一到多个表达式。箭头符号 => 隔开了模式和表达式

一、语法

变量 match {
    case value1 => 代码1
    case value2 => 代码2
    ...
}

match 对应 Java 里的 switch,但是写在选择器表达式之后。即: 选择器 match {备选项}。

match 表达式通过以代码编写的先后次序尝试每个模式来完成计算,只要发现有一个匹配的case,剩下的case不会继续匹配

二、简单案例

/**
 * @author Gjing
 **/
object MatchApp {
  def main(args: Array[String]) {
    // 打印 many
    println(matchTest(3))
  }

  def matchTest(x: Int): String = x match {
    case 1 => "one"
    case 2 => "two"
    case _ => "many"
  }
}

三、类型匹配

/**
 * @author Gjing
 **/
object MatchApp {
  def main(args: Array[String]) {
    println(matchTest2("test"))
    println(matchTest2(6))
  }

  def matchTest2(x: Any): Any = x match {
    case x: String => "Scala.String"
    case y: Int => "scala.Int"
    case _ => "many"
  }
}

实例中第一个 case 对应整型数值 1,第二个 case 对应字符串值 two,第三个 case 对应类型模式,用于判断传入的值是否为整型,相比使用isInstanceOf来判断类型,使用模式匹配更好。第四个 case 表示默认的全匹配备选项,
即没有找到其他匹配时的匹配项,类似 switch 中的 default

四、条件匹配

/**
 * @author Gjing
 **/
object MatchApp {
  def main(args: Array[String]) {
    println(matchTest3(1))
    println(matchTest3("hello"))
    println(matchTest3(2))
  }

  def matchTest3(value: Any): Any = value match {
    case 1 => "输入的是:1"
    case _ if (value.equals("hello")) => "world"
    case _ => value
  }
}

如果输入的不是1,那么会先进行条件判断,满足第二个case的话会走第二个case,否则会走最后一个case

五、数组匹配

/**
 * @author Gjing
 **/
object MatchApp {
  def main(args: Array[String]) {
    // 满足第一个case
    println(matchTest4(Array(1)))
    // 不满足第一个和第二个
    println(matchTest4(Array(1,2)))
    // 满足第二个
    println(matchTest4(Array(2)))
  }

  def  matchTest4(x: Array[Any]): Int = x match {
    case Array(1) => 1
    case Array(2, _*) => 666
    case _ => 0
  }
}

六、List匹配

和数组过滤类似,这里不再讲解,可以自己玩几把

七、样例类匹配

使用了case关键字的类定义就是就是样例类(case class),样例类是种特殊的类,经过优化以用于模式匹配

/**
 * @author Gjing
 **/
object MatchApp {
  def main(args: Array[String]): Unit = {
    println(matchTest5(Person("张三")))
    println(matchTest5(Person("李四")))
    println(matchTest5(Person("老王")))
  }

  def matchTest5(x:Person):String = x match {
    case Person("张三") => "张三"
    case Person("李四") => "李四"
    case _ => "xx"
  }
}

// 样例类
case class Person(name: String)

八、异常处理

/**
 * @author Gjing
 **/
object MatchApp {
  def main(args: Array[String]): Unit = {
    try {
      val i = 10 / 0
      println(i)
    } catch {
      case e: ArithmeticException => println("除数不能为0")
      case e:Exception => println("最大异常")
    }finally {
      // 资源释放的东西,和java类似
    }
  }
}
目录
相关文章
|
5月前
|
分布式计算 Java Hadoop
Scala入门必刷的100道练习题(附答案)
Scala入门必刷的100道练习题(附答案)
655 1
|
5月前
|
Java 大数据 Scala
Scala入门【运算符和流程控制】
Scala入门【运算符和流程控制】
|
2月前
|
监控 安全 Java
Scala 语言助力局域网监控电脑屏幕软件的创新
在数字化办公时代,局域网监控软件对企业和信息安全至关重要。Scala语言融合了面向对象与函数式编程,其简洁的语法和强大的类型系统为这类软件的开发提供了新机遇。利用Scala的函数式编程特性,开发者能编写更简洁、易维护的代码;结合Java的丰富类库,实现高效网络通信;Scala的并发模型还能优化多线程处理,提升监控效率。这些特点使Scala成为开发智能且高效的局域网监控软件的理想选择。
21 0
|
2月前
|
分布式计算 大数据 Java
Scala 入门指南:从零开始的大数据开发
Scala 入门指南:从零开始的大数据开发
|
3月前
|
Scala 开发者
Scala中的模式匹配与高阶函数:探索强大的编程范式
【7月更文挑战第11天】Scala中的模式匹配和高阶函数是两种极其强大的特性,它们不仅提升了代码的表达力和可读性,还使得开发者能够编写出更加灵活和可重用的解决方案。通过
|
3月前
|
分布式计算 大数据 Java
大数据开发语言Scala入门
大数据开发语言Scala入门
|
3月前
|
IDE 大数据 Java
「AIGC」大数据开发语言Scala入门
Scala,融合OOP和FP的多范式语言,在JVM上运行,常用于大数据处理,尤其与Apache Spark配合。要开始学习,安装Scala,选择IDE如IntelliJ。基础包括变量、数据类型、控制结构、函数。Scala支持类、对象、不可变数据结构、模式匹配和强大的并发工具。利用官方文档、教程、社区资源进行学习,并通过实践提升技能。
50 0
|
4月前
|
Scala
scala-模式匹配(字符串、数组、元组、集合、类、偏函数)
scala-模式匹配(字符串、数组、元组、集合、类、偏函数)
24 0
|
5月前
|
Scala
Scala中的异常处理和模式匹配
Scala中的异常处理和模式匹配
42 1
|
5月前
|
Scala
Scala中的模式匹配:强大的匹配和转换工具
Scala中的模式匹配:强大的匹配和转换工具
40 1