|NO.Z.00055|——————————|BigDataEnd|——|Hadoop&Scala.V03|——|Scala.v03|模式匹配和样例类|匿名函数|占位符|
一、匿名函数与占位符
### --- 匿名函数与占位符
~~~ 函数没有名字就是匿名函数;
~~~ 匿名函数,又被称为 Lambda 表达式。 Lambda表达式的形式如下:
~~~ (参数名1: 类型1, 参数名2: 类型2, ... ...) => 函数体
### --- 编程示例
~~~ 定义匿名函数
scala> (x: Int) => x + 1
res0: Int => Int = <function1>
~~~ 函数没有名字,在集成开发环境中是无法被调用的
scala> res0(10)
res1: Int = 11
scala> val list = (1 to 10).toList
lst: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
~~~ 将匿名函数作为参数传递给另一个函数
scala> list.map((x: Int) => x + 1)
res2: List[Int] = List(2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
~~~ x一定是Int类型,这里可以省略
scala> list.map((x) => x + 1)
res3: List[Int] = List(2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
~~~ 只有一个参数,小括号可以省略
scala> list.map(x => x + 1)
res4: List[Int] = List(2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
~~~ 使用占位符简化函数字面量
scala> list.map(_ + 1)
res5: List[Int] = List(2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
~~~ 实现将List中的每个元素*2 + 1,但是出错了
scala> list.map(_ + _ + 1)
<console>:13: error: missing parameter type for expanded function ((x$1, x$2) =>x$1.$plus(x$2).$plus(1))
~~~ 这样是可行的
scala> list.map(2 * _ + 1)
~~~ 通过reduce这个高阶函数,将list列表中的元素相加求和
scala> list.reduce((x,y) => x + y)
res0: Int = 55
~~~ 使用占位符简化函数字面量
~~~ 第一个下划线代表第一个参数,第二个下划线代表第二个参数
scala> list.reduce(_ + _)
res1: Int = 55
### --- 多个下划线指代多个参数,而不是单个参数的重复运用
~~~ 第一个下划线代表第一个参数
~~~ 第二个下划线代表第二个参数
~~~ 第三个……,如此类推
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
bdv015-scala
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通