Scala - 模式匹配

Scala - 模式匹配 首页 / Scala入门教程 / Scala - 模式匹配

在函数值和闭包之后,模式匹配是Scala第二广泛使用的函数, Scala在处理消息时为模式匹配提供了强大的支持。

Pattern - 示例

object Demo {
   def main(args: Array[String]) {
      println(matchTest(3))
   }
   
   def matchTest(x: Int): String=x match {
      case 1 => "one"
      case 2 => "two"
      case _ => "many"
   }
}

将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。

链接:https://www.learnfk.comhttps://www.learnfk.com/scala/scala-pattern-matching.html

来源:LearnFk无涯教程网

\>scalac Demo.scala
\>scala Demo
many

带case语句的块定义一个函数,该函数将整数映射到字符串。 match关键字提供了将函数(如上面的模式匹配函数)应用于对象的便捷方法。

Pattern - 示例

object Demo {
   def main(args: Array[String]) {
      println(matchTest("two"))
      println(matchTest("test"))
      println(matchTest(1))
   }
   
   def matchTest(x: Any): Any=x match {
      case 1 => "one"
      case "two" => 2
      case y: Int => "scala.Int"
      case _ => "many"
   }
}

将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。

链接:https://www.learnfk.comhttps://www.learnfk.com/scala/scala-pattern-matching.html

来源:LearnFk无涯教程网

\>scalac Demo.scala
\>scala Demo
2
many
one

Case类进行匹配

case类是用于与case表达式进行模式匹配的特殊类,从语法上讲,这些是带有特殊修饰符的标准类: case 。

object Demo {
   def main(args: Array[String]) {
      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 + "?")
         }
      }
   }
   case class Person(name: String, age: Int)
}

将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。

链接:https://www.learnfk.comhttps://www.learnfk.com/scala/scala-pattern-matching.html

来源:LearnFk无涯教程网

\>scalac Demo.scala
\>scala Demo
Hi Alice!
Hi Bob!
Age: 32 year, name: Charlie?

首先,编译器自动将构造函数参数转换为不可变的字段(值), val关键字是可选的,如果要使用可变字段,请使用var关键字。

其次,编译器自动为类实现 equals,hashCode,和 toString 方法,这些方法使用指定为构造函数参数的字段。因此,我们不需要自己的toString()方法。

最后, Person 类的主体也将变为空,因为不需要定义任何方法!

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

从0开始学微服务 -〔胡忠想〕

深入剖析Kubernetes -〔张磊〕

重学前端 -〔程劭非(winter)〕

从0开始做增长 -〔刘津〕

SQL必知必会 -〔陈旸〕

移动端自动化测试实战 -〔思寒〕

WebAssembly入门课 -〔于航〕

基于人因的用户体验设计课 -〔刘石〕

B端体验设计入门课 -〔林远宏(汤圆)〕

好记忆不如烂笔头。留下您的足迹吧 :)