Scala 系列 - 模式匹配 Pattern Matching

本文主要介绍 Scala 中的模式匹配

普通的模式匹配

val a = 1
val b = a match {
	case 1 => 'a'
	case 2 => 'b'
	case _ => 'c'
}
  • match 是表达式,不是语句,所以可以将 match 语句的值赋值给其他变量

带守卫的模式匹配

val a = 100
val b = a match {
	case 1 => 'a'
	case 2 => 'b'
	case _ if a%10==0 => 'c'
	case _ => 'd'
}
  • 守卫可以是任何 boolean 条件

带变量的模式匹配

val a = 100
a match {
	case 1 => 'a'
	case 2 => 'b'
	case ch => println(ch)}
// 100
  • 匹配到的变量会被赋值,但是变量只存在与{}作用域内

带变量类型的模式匹配

val a = 100
val b = a match{
	case 1 => 1
	case 2 => 2
	case x: Int => x
	case s: String => s	
}
// b = 100

序列的模式匹配

// 以Array为例
val a = Array(0, 1)
a match{
	case Array(0) => 0
	case Array(1) => 1
	case Array(x, y) => x+y
}

变量声明中的模式匹配

val (x, y) = (1, 2)
// 把arr中的第一个和第二个元素赋值给x,y
val Array(x, y, _*) = arr

样例类

  • 自带 apply 和 unapply 方法
  • 构造器中的每一个参数都为 val 类型,除了被显示声明为 var 的
  • 将生成 toString,equals,hashCode和copy方法
object test {
  def main(args: Array[String]): Unit = {
    t
  }

  def t: Unit = {
    abstract class aa
    case class a0(x: Int) extends aa
    case class a1(x: Int, y: Int) extends aa
    case object class o extends aa 

    def test(x: aa): Unit = {
     x match{
       // 自带apply方法,不需要new关键字
       case a1(x, y) => println(x, y)
       case a0(x) => println(x)
       case _ => println("...")
     }
    }

    test(a0(1))
    }
}

参考资料:《快学Scala》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值