【Scala 教程】Scala 模式匹配与异常处理

文章作者:梦家
个人站点:dreamhomes.top
原文地址:https://dreamhomes.top/707.html
公众号ID:DreamHub

本文介绍 Scala 中的模式匹配与异常处理,这两部分内容放在一起的原因是 Scala 中的异常处理是利用模式匹配的思想!

Jupyter 中学习效果更加哦!传送门~

Scala 模式匹配

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

// 模式匹配实例
def matchTest(x: Int): String = x match {
    case 1 => "one"
    case 2 => "two"
    case _ => "many"
}
println(matchTest(3))
many

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

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

//不同数据类型的模式匹配
def matchTest(x: Any): Any = x match {
  case 1 => "one"
  case "two" => 2
  case y: Int => "scala.Int"
  case _ => "many"
}
println(matchTest("two"))
println(matchTest("test"))
println(matchTest(1))
println(matchTest(6))
2
many
one
scala.Int

使用样例类

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

// 实例

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

val alice = new Person("Alice", 25)
val bob = new Person("Bob", 32)
val charlie = new Person("Charlie", 32)


for (person <- List(alice, bob, charlie)) {
    person match {
        case Person("Alice", 25) => println("Hi Alice!")
        case Person("Bob", 32) => println("Hi Bob!")
        case Person(name, age) =>
           println("Age: " + age + " year, name: " + name + "?")
     }
}
Hi Alice!
Hi Bob!
Age: 32 year, name: Charlie?

Scala 异常处理

Scala 的异常处理和其它语言比如 Java 类似。

Scala 的方法可以通过抛出异常的方法的方式来终止相关代码的运行,不必通过返回值。

抛出异常

Scala 抛出异常的方法和 Java一样,使用 throw 方法,例如,抛出一个新的参数异常:

throw new IllegalArgumentException

捕获异常

异常捕捉的机制与其他语言中一样,如果有异常发生,catch 字句是按次序捕捉的。因此,在catch字句中,越具体的异常越要靠前,越普遍的异常越靠后。 如果抛出的异常不在catch字句中,该异常则无法处理,会被升级到调用者处。

捕捉异常的 catch 子句,语法与其他语言中不太一样。在Scala里,借用了模式匹配的思想来做异常的匹配,因此,在catch的代码里,是一系列case字句,

import java.io.FileReader
import java.io.FileNotFoundException
import java.io.IOException
try {
 val f = new FileReader("none-input.txt")
} catch {
 case ex: FileNotFoundException =>{
    println("Missing file exception")
 }
 case ex: IOException => {
    println("IO Exception")
 }
}
Missing file exception

finally 语句

finally 语句用于执行不管是正常处理还是有异常发生时都需要执行的步骤

import java.io.FileReader
import java.io.FileNotFoundException
import java.io.IOException
try {
 val f = new FileReader("none-input.txt")
} catch {
 case ex: FileNotFoundException =>{
    println("Missing file exception")
 }
 case ex: IOException => {
    println("IO Exception")
 }
} finally{
    println("Exiting finally...")
}
Missing file exception
Exiting finally...

联系作者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值