基本模式匹配
// 如同java中的switch case,需要匹配的参数放在match的前面,然后在方法体的case中进行相应的匹配执行的代码逻辑操作
object MatchApp extends App{
val names = Array("鹅","瓜","渣")
val name = names(Random.nextInt(names.length))
name match {
case "鹅" => println("鸟叔")
case "瓜" => println("瓜帅")
case _=> println("渣叔")
}
def gradeTest(grade:String): Unit = {
grade match{
case "A" => println("成绩很优秀")
case "B" => println("成绩可以")
case "C" => println("成绩勉强")
case _ => println("成绩待提高啊")
}
}
gradeTest("A")
gradeTest("B")
gradeTest("D")
}
加条件的模式匹配:双重过滤
def gradeTest(name:String,grade:String): Unit = {
grade match{
case "A" => println("成绩很优秀")
case "B" => println("成绩可以")
case "C" => println("成绩勉强")
case _ if(name == "lisi")=> println(name+",成绩待提高啊")
case _=> println("成绩有点差啊")
}
}
类型匹配
根据传入的参数的类型进行匹配,获取相应的参数的类型
eg:
obj match{
case i : Int => println("Int")
case s : String => println("String") //匹配到String字符串
case map : Map[_,_] => map.foreach(println) //匹配到map集合并且打印
case list : List[_] => println("List") //匹配到List集合
case _=> println("类型不存在!")
}
}
matchType(Map("li" -> "sda"))
matchType(List("lisi"))