Spark

Scala模式匹配

2018-12-10  本文已影响44人  geekAppke
Scala 提供了强大的模式匹配机制,应用也非常广泛
一个模式匹配包含了一系列备选项,每个都开始于关键字 case
每个备选项都包含了一个模式及一到多个表达式。箭头符号 => 隔开了模式和表达式
Actor节点与节点之间通信、发送消息,全都是模式匹配!

模式匹配match

object Lesson_Match {
  def main(args: Array[String]): Unit = {
    val tuple = Tuple6(1,2,3f,4,"abc",55d)
    val tupleIterator = tuple.productIterator
    while(tupleIterator.hasNext){
      matchTest(tupleIterator.next())
    }
    
  }
  /**
   * 注意点:
   * 1.模式匹配不仅可以匹配值,还可以匹配类型
   * 2.模式匹配中,如果匹配到对应的类型或值,就不再继续往下匹配
   * 3.模式匹配中,都匹配不上时,会匹配到` case _ `,相当于`default`
   */
  def matchTest(x:Any) ={
    x match {
      case i:Int=> println("type is Int")
      case 1 => println("result is 1")
      case 2 => println("result is 2")
      case 3 => println("result is 3")
      case 4 => println("result is 4")
      case s:String => println("type is String")
      case d :Double => println("type is Double")
      case _ => println("no match")
    }
  }
}

样例类case classes

使用了case关键字修饰的类,就是样例类(case classes),样例类是种特殊的类。
默认实现了类构造参数getter方法(构造参数默认被声明为val
当声明构造参数为var类型,它将帮你实现settergetter方法

case class Person1(name:String,age:Int) 

object Lesson_CaseClass {
  def main(args: Array[String]): Unit = {
    val p1 = new Person1("zhangsan",10)
    val p2 = Person1("lisi",20)
    val p3 = Person1("wangwu",30)
    
    val list = List(p1,p2,p3)
    list.foreach { x => {
      x match {
        case Person1("zhangsan",10) => println("zhangsan")
        case Person1("lisi",20) => println("lisi")
        case _ => println("no match")
      }
    } }
  }
}

Scala学习笔记导航

上一篇 下一篇

猜你喜欢

热点阅读