case中的通配符 _ 相当于java中的default分支
match结构中不需要break语句来跳出判断,scala会从前往后匹配,一旦配到一个分支即停止
- 匹配字符:
import scala.io.StdIn._ println("Please input the score Level: ") val grade = readChar() grade match{ case 'A' => println("85-100") case 'B' => println("70-84") case 'C' => println("60-69") case 'D' => println("< 60") case _ => println("error input !") }
- 匹配字符串
import scala.io.StdIn._ val country = readLine("please input your country: ") country match { case "中国" => println("you are from China") case "美国" => println("youa are from USA") case "日本" => println("you are from Japan") case _ => println("country input wrong!") }
- 匹配类型
val list1 = List(1,2L,3.3f,"HUAHUA") for(i <- list1){ val str = i match { case i:Int => "Int value" case l:Long => "Long value" case f:Float => "Fload value" case s:String => "String value" case _ => "unexpected value" } println(i + " is " + str) }
- guard类型
for (i <- (1 to 10).toList){ i match { case _ if(i % 2 == 0) => println(i + " is even number") case _ => println(i + " is odd number") } }
- case class 类型
case class Car(brand:String, price:Int) for(car <- List(Car("BYD",8000),Car("BMW",9000),Car("BENZ",11000))){ car match { case Car("BYD",8000) => println("Hello BYD") case Car("BMW",9000) => println("Hello BMW") case Car(brand,price) => println("Brand: " + brand + ", Price: " + price + ", you want it ?") } }
-
- 每一个case子句中的Car(…),都会自动调用Car.unapply(car),并将提取到的值与Car后面括号里的参数进行一一匹配比较。
- 第一个case和第二个case是与特定的值进行匹配。
- 第三个case由于Car后面跟的参数是变量,因此将匹配任意的参数值。
-----
来源:https://www.cnblogs.com/wooluwalker/p/12306054.html