美文网首页
Scala语言入门四(模式匹配)

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

作者: 阿靖哦 | 来源:发表于2020-10-10 09:46 被阅读0次

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类似
    }
  }
}

相关文章

  • Case Class与模式匹配

    模式匹配入门 在java语言中存在switch语句,例如: 上述scala代码展示了如何使用scala中的模式匹配...

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

    Scala 提供了强大的模式匹配机制,应用也非常广泛。一个模式匹配包含了一系列备选项,每个都开始于关键字 case...

  • Scala模式匹配及偏函数

    模式匹配公式: 一、代码Demo 二、Scala中的模式匹配处理异常 三、Scala函数

  • Scala学习笔记(八) 模式匹配

    1. 模式匹配简介 模式匹配是 Scala 的重要特性之一,前面两篇笔记Scala学习笔记(六) Scala的偏函...

  • Scala语言入门

    Scala语言入门——大纲

  • scala模式匹配

    以下是常见的scala模式匹配实例。 variableName @ pattern 下面这个示例 模式匹配中cas...

  • 2020 Rust 入门 枚举

    模式匹配是许多函数式编程语言(如Haskell或Scala) 的基础和强大的构建块。对于最初接触面向对象语言来说,...

  • scala模式匹配

    1.scala是匹配和java中的switch的区别: ...

  • scala 模式匹配

    scala的模式匹配与java的switch case相似,但是switch case只能对值进行判断,scala...

  • Scala 模式匹配

    样本类 case class 类前加上case修饰符,编译器会添加额外的语法,更好的支持模式匹配 添加与类名称相同...

网友评论

      本文标题:Scala语言入门四(模式匹配)

      本文链接:https://www.haomeiwen.com/subject/qoedpktx.html