第十五讲 模式匹配和样例类

本章要点

  • match
  • case 类

scala有一个强大的模式匹配机制,可以应用在很多场合:switch语句、类型检查,以及“析构”(获取复杂表达式中的不同部分)。
scala还提供样例类

15.1 match

class Test{
}
object Test{  
  def main(args: Array[String]): Unit = {
    val sex:String="1";
   def manDesc(sex:String):String=sex match {
      case "nv" =>"漂亮"
      case "nan" =>"帅气"
      case _=>"不男不女"
    }
   println(manDesc(sex));
  }
}

与default 效果类似的是 case _,无匹配的时候执行case _语句。
注意: case后面没有break语句,并且match后边表达式中可以使用任何类型。

类型匹配:

class Test{
}
object Test{  
  def main(args: Array[String]): Unit = {
   def matchType(obj:Any)=obj match{
     case x:Integer => x+10;
     case s:String=>"hello"+s;
     case _ => 0;
     }
     println(matchType(Int))
   }
}

变量匹配

class Test {
}
object Test {
  def main(args: Array[String]): Unit = {
    def abs(x: Int) = x match {
      case x if (x > 0) => x
      case x if (x < 0) => -x
    }
  }
}

构造匹配

case class User(name: String, password: String)
class Test {
}
object Test {
  def main(args: Array[String]): Unit = {
    val user = new User("zhaosc", "1234")
    def constructor(u: User) = user match {
      //构造器模式必须将User类定义为case class,否则需要自己定义伴生对象并实现unapply方法。
      case User(name, password) => "name =" + name + ",password =" + password
      case _ => "Other"
    }
    println(constructor(user))
  }
}

15.2 样例类

  1. 概念理解
    使用了case关键字的类定义就是样例类(case classes),样例类是种特殊的类,他们经过优化以被用于模式匹配。
  • 样例类构造器中的每一个参数,都是val的;实现了类构造参数的getter方法(构造参数默认被声明为val),当构造参数是声明为var类型的,它将帮你实现setter和getter方法。
  • 样例类默认帮你实现了toString,equals,copy和hashCode等方法。
  • 样例类可以new, 也可以不用new
case class User(name: String, password: String)

你可能感兴趣的:(第十五讲 模式匹配和样例类)