scala中的模式匹配,类似于java中的 switch-case 语法,它有三种实现:
(1)x match(arg:type) - case XXXX => {…} case YYYY
(2)使用样例类实现模式匹配
(3)使用偏函数实现模式匹配
——————
(1)x match(arg:type) - case XXXX => {…} case YYYY
scala的模式匹配规则:只要发现有一个匹配的case,其余的case就不会继续匹配了
【例一】
object ScalaPatternTest1 {
//参数是整型. 返回值类型是字符串。具体返回的字符串由匹配的参数值来决定
def test_match(x:Int) :String = x match {
case 0 => "It's empty"
case 1 => "It has one"
case _ => "More than one"// 默认通配选项,即“未匹配到任一个case时的选项”
}
def main(args: Array[String]) {
println(test_match(5))
println(test_match(0))
println(test_match(1))
}
}
例一的输出结果:
More than one
It's empty
It has one
【例二】
object ScalaPatternTest2{
//参数可以是任意类型(Any是Int,String,Boolean的超类,类似java中的Object)
//具体的返回值由匹配的实参决定
def test_match2(arg:Any) :Any = arg match {
case 10 => "ten"
case "three" => 3
case arg: Boolean => arg//如果传入的参数是布尔值,则返回参数本身
case arg: Int => "your input is: Scala.Int" //判断输入的实参类型是不是整型
case _ => "other input"
}
def main(args: Array[String]) {
println(test_match2(true))
println(test_match2(10))
println(test_match2("three"))
println(test_match2(100))
println(test_match2("good afternoon"))
}
}
例二的输出结果:
true
ten
3
your input is: Scala.Int
other input
———————
(2)使用样例类实现模式匹配
scala的样例类说明:
主要用于模式匹配.
内置了apply和unapply方法,还有串行化等接口.
创建对象时不需要使用new.
语法:case关键字+class+类名
【例】
object CaseClassTest {
/*
使用样例类实现模式匹配
*/
def main(args: Array[String]) {
val cindy = User("Cindy", 24, "Los Angeles")
val karl = User("Karl", 27, "Sydney")
val alice = User("Alice", 21, "Beijing")
for (u <- List(cindy, alice,karl)) {
u match {
case User("Tony_kidkid", 27,"Beijing") => println("what's up?tony")
case User("Alice", 21, "Beijing") => println("hi~ Alice")
case User("Karl", 27, "Sydney") => println("hi~ Karl")
case User("Cindy", 24, "Los Angeles") => println("hi~ Cindy")
}
}
}
case class User(name: String, age: Int, city: String)
}
输出结果:
hi~ Cindy
hi~ Alice
hi~ Karl
————————-
(3)使用偏函数实现模式匹配
object PartialFuncTest {
def main(args: Array[String]) {
/*定义变量,将会传给偏函数tony_kid
* var表示是变量,可重新赋值;val表示常量,不可重新赋值
*/
var var1 = 1
var var0 = 0
var var_x = “evening”
//调用偏函数
println(tony_kid(var1))
println(tony_kid(var0))
var0 = 10
println(tony_kid(var0))
//报错:传入的数据类型不是声明的Int
//tony_kid(var_x)
}
//定义一个偏函数. 规定了传入的类型和返回类型分别是Int、String
val tony_kid: PartialFunction[Int, String] = {
case 0 => "zero"
case 1 => "more than zero"
case _ => "既不是 0 也不是 1"
}
}
输出结果:
more than zero
zero
既不是 0 也不是 1
---------------
好了,就写到这里,看官们觉得涨知识了,请在文章左侧点个赞 ^_^