scala要点总结5:模式匹配

本文总结了Scala模式匹配的四大要点:数值和字符串匹配、类型匹配、数组和集合匹配以及case类匹配,揭示了其比Java switch更强大的功能。
摘要由CSDN通过智能技术生成

scala模式匹配和Java的switch功能类似,但是功能更加的强大,支持各种类型的匹配方式

 

1. 数值和字符串匹配

val list = List("aa", 2, 3)
for (x <- list) {
  x match {
    case 1 => println("1")
    case 2 => println("2")
    case 3 => println("3")
    case _ => println("other")
  }
}
/* output:
 * other
 * 2
 * 3
 */

2. 类型匹配

val list = List("aa" ,2, new TestClass, 1.0)
for (x <- list) {
  x match {
    case str : String => println("String")
    case int : Int => println("Int")
    case a : TestClass => println("TestClass")
    case _ : Any => println("other type")
  }
}
/*
output:
String
Int
TestClass
other type
*/

3. 数组,集合匹配

/** 数组 */
val arr = Array(1, 2, 3)
arr match {
  case Array(1, 2) => println("case1 : 1, 2")
  case Array(2, 3, 1) => println("case2 : 2, 3, 1")
  case Array(a, b, c) => println(s"case3 : $a, $b, $c")
  case _ => println("case4 : other")
}
// output: case3 : 1, 2, 3

/** List */
val list = List(1 ,2, 3)
list match {
  case List(1, 2) => println("case1 1, 2")
  case 1 :: 3 :: 2 :: Nil => println("case2 1, 3, 2")
  case 1 :: 2 :: 3 :: Nil => println("case3 1, 2, 3")
  case _ => println("other")
}
// output: case3 1, 2, 3

4. case类匹配

class NormalClass(val id : Int)
object NormalClass{
  def apply(id: Int): NormalClass = new NormalClass(id)

  def unapply(arg: NormalClass): Option[Int] = {
    if (arg == null)
      None
    else
      Some(arg.id)
  }
}
// case类自动帮你生成伴生对象,apply和unapply等方法。效果和上面的一坨代码一样
case class CaseClass(id : Int)

val list = List(NormalClass(1), CaseClass(2))
for (x <- list) x match {
  case NormalClass(1) => println("case1 : NormalClass(1)")
  case NormalClass(2) => println("case2 : NormalClass(2)")
  case CaseClass(1) => println("case3 : caseClass(1)")
  case CaseClass(2) => println("case4 : caseClass(2)")
  case _ => println("other")
}
/*
* output:
* case1 : NormalClass(1)
* case4 : caseClass(2)
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值