Scala解构声明用例子通俗易懂
目录
Scala:解构声明(用例子通俗易懂)
一句话解释 :
解构声明就是“拆包裹”——把打包好的数据(比如元组、列表)拆开,把里面的值直接赋给变量。
——
举个栗子 🌰
假设你的代码里有这样一行:
scala复制代码
val (math, english, physics) = scores.unzip3
这里发生了什么?
scores
的结构 :scala复制代码
// 假设scores是一个包含多个三元组的列表,比如: List( (80,64,78), (65,87,58), (44,71,77) )
- 每个三元组代表一个学生的三门课成绩,比如
(80,64,78)
表示数学80,英语64,物理78
- 每个三元组代表一个学生的三门课成绩,比如
unzip3
的作用 :把“粘在一起”的三门课成绩拆分成三个独立的列表:
scala复制代码
( List(80, 65, 44), // 所有数学成绩 List(64, 87, 71), // 所有英语成绩 List(78, 58, 77) // 所有物理成绩 )
解构赋值 :
scala复制代码
val (math, english, physics) = 拆出来的三个列表
math
List(80, 65, 44)
(所有数学成绩)english
List(64, 87, 71)
(所有英语成绩)physics
List(78, 58, 77)
(所有物理成绩)
相当于把三个包裹📦一次性拆开,把里面的东西分别放进三个盒子!
——
为什么要用解构?
- 代码更短 :不用写三行分别取每个列表
- 更直观 :变量名直接对应科目(math, english, physics)
——
其他常见场景(举个超简单例子)
scala复制代码
// 场景1:元组解构
val 学生信息 = ("张三", 18, 90)
val (姓名, 年龄, 分数) = 学生信息 // 直接拆开
println(姓名) // 输出"张三"
// 场景2:列表解构
val List(第一科, 第二科, _*) = List("数学", "英语", "物理", "化学")
println(第一科) // "数学"
println(第二科) // "英语"
// _* 表示剩下的科目不管了
——
注意事项 ⚠️
形状要对得上 :左边变量个数要和右边数据结构的元素个数一致
scala复制代码
// 错误示范:元组只有3个元素,左边却要拆成4个变量 val (a,b,c,d) = (1,2,3) // 会报错!
这下应该明白啦!其实就是把打包的数据拆开用的快捷方式~ 😄