1. 程式人生 > >Scala學習筆記(5)—— Scala 模式匹配

Scala學習筆記(5)—— Scala 模式匹配

1 模式匹配

package com.scalatest.scala.pattern

import scala.util.Random

object MatchApp extends App {
    val names = Array("Mike", "John", "Jenny")

    val name = names(Random.nextInt(names.length))

    name match {
        case "Mike" => println("Mike selected")
        case "Jenny" =>
println("Jenny select") case _ => println("no select") } def judgeGrade(name: String, grade: String) = { grade match { case "A" => println("eccellent...") case "B" => println("good..") case "C" => println("nice..") case _ if
(name == "Mike") => println(name + " low..") case _ => println("bad..") } } judgeGrade("lisi","D") judgeGrade("Mike","D") }

在這裡插入圖片描述

2 陣列模式匹配

package com.scalatest.scala.pattern

import scala.util.Random

object MatchApp extends App {
    def greeting(array:
Array[String]) = { array match { case Array("Mike") => println("hello:Mike") case Array(x, y) => println("hello " + x + "," + y) case Array("Mike", _*) => println("hello Mike and others....") case _ => println("hi everyone") } } greeting(Array("Mike")) greeting(Array("Mike","Jenny")) greeting(Array("John","Mike","Jenny")) }

在這裡插入圖片描述

3 List 模式匹配

package com.scalatest.scala.pattern

import scala.util.Random

object MatchApp extends App {

    def greeting(list: List[String]) = {
        list match {
            case "Mike" :: Nil => println("hi : Mike")
            case x :: y :: Nil => println("hi: " + x + "," + y)
            case "Mike" :: tail => println("hi: Mike and others" )
            case _ => println("hi everyone..")
        }
    }

    greeting(List("Mike"))
    greeting(List("Mike","lisi"))


}

在這裡插入圖片描述

4 型別匹配

package com.scalatest.scala.pattern

import scala.util.Random

object MatchApp extends App {

    def matchType(obj: Any) = {
        obj match {
            case x: Int => println("Int")
            case s: String => println("String")
            case m: Map[_, _] => m.foreach(println)
            case _ => println("other type")
        }
    }

    matchType(1)
    matchType("1")
    matchType(1f)
    matchType(Map("name"->"Mike"))
}

在這裡插入圖片描述

5 異常處理

package com.scalatest.scala.pattern

object ExceptionApp extends App {

    try {
        val i = 10 / 0
        println(i)
    } catch {
        case e: ArithmeticException => println("除數不能為0")
        case e:Exception => e.printStackTrace()
    }finally {

    }

}

在這裡插入圖片描述

6 case class 模式匹配

package com.scalatest.scala.pattern

object ExceptionApp extends App {
    def caseclassMatch(person: Person): Unit = {
        person match {
            case CTO(name, floor) => println("CTO name is" + name + ", floor: " + floor)
            case Employee(name,floor) => println("Employee name is :" + name + ", floor:" + floor)
            case _ => println("other")
        }
    }

    class Person

    case class CTO(name: String, floor: String) extends Person

    case class Employee(name: String, floor: String) extends Person

    case class Other(name: String) extends Person

    caseclassMatch(CTO("Jordon","20"))
    caseclassMatch(Employee("Lee","9"))
    caseclassMatch(Other("other"))

}

在這裡插入圖片描述