在函数值和闭包之后,模式匹配是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 中。以下命令用于编译和执行该程序。
\>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 中。以下命令用于编译和执行该程序。
\>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 中。以下命令用于编译和执行该程序。
\>scalac Demo.scala \>scala Demo
Hi Alice! Hi Bob! Age: 32 year, name: Charlie?
首先,编译器自动将构造函数参数转换为不可变的字段(值), val关键字是可选的,如果要使用可变字段,请使用var关键字。
其次,编译器自动为类实现 equals,hashCode,和 toString 方法,这些方法使用指定为构造函数参数的字段。因此,我们不需要自己的toString()方法。
最后, Person 类的主体也将变为空,因为不需要定义任何方法!
参考链接
https://www.learnfk.com/scala/scala-pattern-matching.html
标签:case,scala,Demo,Scala,无涯,Person,println,matchTest,模式匹配 From: https://blog.51cto.com/u_14033984/9431031