类似java switch
常量模式匹配
变量模式匹配
通配符模式匹配
object PatternDemo { def main(args: Array[String]): Unit = { //常量模式匹配 // 常量字面值的匹配 val site = "baidu.com" site match { case "baidu.com" => println("success") ///下划线相当于java中的default,不可以缺少,不需要break,一旦匹配就不会继续运行 case _ => println("fail") } //常量变量的匹配 val site2 = "baidu.com" val baidu = "baidu.com" val baidu2 = "baidu.com2" val BAIDU = "baidu.com" val BAIDU2 = "baidu.com2" site2 match { case BAIDU => println("success") ///下划线相当于java中的default,不可以缺少,不需要break,一旦匹配就不会继续运行 case _ => println("fail") } site2 match { //大写的是常量,无法赋值,直接匹配 case BAIDU2 => println("success") ///下划线相当于java中的default,不可以缺少,不需要break,一旦匹配就不会继续运行 case _ => println("fail") } site2 match { //把小写的当成常量了,直接赋值了 case baidu => println("success") ///下划线相当于java中的default,不可以缺少,不需要break,一旦匹配就不会继续运行 case _ => println("fail") } site2 match { case baidu2 => println(baidu2 + "success") ///下划线相当于java中的default,不可以缺少,不需要break,一旦匹配就不会继续运行 case _ => println("fail") } println(baidu2) //通配符模式的匹配 val list = List(1, 2, 4) list match { case List(_, _, 3) => println("success") case _ => println("fail") } } } |
样例类匹配
//做一个信息的识别 abstract class Notificatition //定义不同信息的样例类 case class Email(sender: String, title: String, body: String) extends Notificatition case class SMS(caller: String, msg: String) extends Notificatition case class VoiceRecording(contactName: String, link: String) extends Notificatition object PatternDemo2 { def showNotificatition(notificatition: Notificatition): String = { notificatition match { case Email(sender, title, body) => "收到邮件" + sender case SMS(caller, msg) => "收到SMS" + caller case VoiceRecording(contactName, link) => "收到录音" + contactName case _ => "获取到垃圾信息" } } def main(args: Array[String]): Unit = { val email = Email("zhangsan", "lisi", "hhhh") val email2 = Email("lisi", "lisi", "hhhh") println(showNotificatition(email)) println(showNotificatition(email2)) } } |
类型匹配
import scala.util.Random //做一个信息的识别 abstract class Notificatition //定义不同信息的样例类 case class Email(sender: String, title: String, body: String) extends Notificatition case class SMS(caller: String, msg: String) extends Notificatition case class VoiceRecording(contactName: String, link: String) extends Notificatition object PatternDemo2 { def showNotificatition(notificatition: Notificatition): String = { notificatition match { case Email(sender, title, body) => "收到邮件" + sender case SMS(caller, msg) => "收到SMS" + caller case VoiceRecording(contactName, link) => "收到录音" + contactName case _ => "获取到垃圾信息" } } def main(args: Array[String]): Unit = { val email = Email("zhangsan", "lisi", "hhhh") val email2 = Email("lisi", "lisi", "hhhh") println(showNotificatition(email)) println(showNotificatition(email2)) //类型匹配 val arr = Array("s", 1, 'c') val obj = arr(Random.nextInt(3)) println(obj) obj match { case x: Int => println(x) case s: String => println(s.toUpperCase) case c: Char => println(c) case _ => println("fail") } } } |