一. scala 模式匹配(pattern matching)
e match { case Pattern1 => do Something case Pattern2 if-clause => do others ...}
case class Player(name: String, score: Int)def printMessage(player: Player) = player match { case Player(_, score) if score > 100000 => println("Get a job, dude!") case Player(name, _) => println("Hey, $name, nice to see you again!")}
def parseArgument(arg: String) = arg match { //匹配值 case "-h" | "--help" => displayHelp case "-v" | "--version" => displayVerion case whatever => unknownArgument(whatever)}def f(x: Any): String = x match { //匹配类型 case i:Int => "integer: " + i case _:Double => "a double" case s:String => "I want to say " + s}
case class Player(name: String, score: Int)def message(player: Player) = player match { case Player(_, score) if score > 100000 => "Get a job, dude!" case Player(name, _) => "Hey, $name, nice to see you again!"}
二. 为什么要用 pattern matching
trait User { def name: String}class FreeUser(val name: String) extends Userobject FreeUser { //提取器 def unapply(user: FreeUser): Option[String] = Some(user.name)} val user: User = new FreeUser("Daniel") user match { case FreeUser(name) => println("it match here" + name) case _ => println("not me") }
val user: User = new FreeUser("Daniel") //将返回结果存在一个常量中 val message = user match { caseFreeUser(name) => "it match here" + name case _ => "not me" } //可以随意使用该常量,实现解耦 println(message)