一.模式匹配

1.1.概念理解

Scala 提供了强大的模式匹配机制,应用也非常广泛。
一个模式匹配包含了一系列备选项,每个都开始于关键字 case。
每个备选项都包含了一个模式及一到多个表达式。箭头符号 => 隔开了模式和表 达式。

代码及注意点

  • 模式匹配不仅可以匹配值还可以匹配类型
  • 从上到下顺序匹配,如果匹配到则不再往下匹配
  • 都匹配不上时,会匹配到 case _ ,相当于 default
  • match 的最外面的”{ }”可以去掉看成一个语句
package com.neu

/**
* @Author yqq
* @Date 2021/12/06 16:21
* @Version 1.0
*/
object TestMatch {
def main(args: Array[String]): Unit = {
//定义一个元组,让元组中的每一个值去做模式匹配
val tuple = Tuple5(10, 20, 30, "abc", 100d)
tuple.productIterator.foreach(matchElement(_))//‘_’代表迭代器中的每一个元素
}
def matchElement(x:Any):Any={
x match {//一个case代表一个匹配选项
case y:Int=>println("当前元素是整型")
case 10 =>println("当前元素的值是10")
case yyy:Double=>println("当前元素是double类型")
case _=>println("没有任何匹配项")//case _必须写在最后面
}

}
}

二.偏函数

如果一个方法中没有 match 只有 case,这个函数可以定义成 PartialFunction 偏函 数。偏函数定义时,不能使用括号传参,默认定义 PartialFunction 中传入一个值, 匹配上了对应的 case,返回一个值,只能匹配同种类型。

package com.neu

/**
* @Author yqq
* @Date 2021/12/06 16:46
* @Version 1.0
*/
object PartialFun {
def sayHello:PartialFunction[Any,String]={
case x:Int=>"当前数据为整型"
case "hello"=>"当前的值为hello我希望得到的"
case _=>"前面的元素都没有匹配上"
}
def main(args: Array[String]): Unit = {
println(sayHello("hello"))
}
}