scala要点总结5:模式匹配

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)
*/

猜你喜欢

转载自blog.csdn.net/zhanht/article/details/89042141
今日推荐