1. 说明
Scala中很多地方都可以使用模式,并不仅仅是match表达式中
如果不清楚模式是什么,可以看这里🌰
2. 使用模式同时给多个变量赋值
// 使用 二元组 给变量赋值
val (id, name) = (10, "小明")
println(s"$id : $name") // 10 : 小明
// 使用 样例类 给变量赋值
case class cPerson(id: Int, name: String, age: Int)
val p = cPerson(10, "张飞", 28)
val cPerson(pid, pname, page) = p
println(s"${pid} ${pname} ${page}") // 10 张飞 28
3. 使用模式定义函数字面量&偏函数字面量
在Scala中 允许使用 case分支 来定义函数字面量或者偏函数字面量
如果不清楚什么偏函数,可以看这里🌰
// 定义 普通函数字面量(标准格式)
val sum1: Option[Int] => Int = (x: Option[Int]) => x match {
case Some(a) => a
case None => 0
}
// 定义 普通函数字面量(省略格式)
val sum2: Option[Int] => Int = {
case Some(x) => x
case None => 0
}
sum1(Option(10))
sum1(None)
// 定义 偏函数字面量
val psum: PartialFunction[Option[Int], Int] = {
case Some(x) => x
case None => 0
}
4. 在for表达式中使用模式
val list = List((1, "刘备"), (2, "关羽"), (3, "张飞"), (4, "???"))
val map = Map(1 -> "刘备", 2 -> "关羽", 3 -> "张飞", 4 -> "赵云")
// for表达式 使用变量模式
for ((id, name) <- list) {
println(s"${id}:${name}")
}
for ((id, name) <- map) {
println(s"${id}:${name}")
}
val result: List[Option[String]] = List(Option("苹果"), None, Option("橘子"), Option("香蕉"))
// 注意 只会获取到匹配到的值
for (Some(i) <- result) {
println(i)
}