a10_scala 匿名函数 和 匿名函数的简化原则

编程入门 行业动态 更新时间:2024-10-27 04:29:58

a10_scala 匿名<a href=https://www.elefans.com/category/jswz/34/1771370.html style=函数 和 匿名函数的简化原则"/>

a10_scala 匿名函数 和 匿名函数的简化原则

导航

    • scala outline
    • 为什么使用匿名函数
    • 匿名函数的简化

scala outline

scala outline

为什么使用匿名函数

目标:定义一个计算器,可以实现简单的加减

  1. 定义一个函数calculator,该函数接收一个函数类型的参数op,op中定义了对2个整数要进行什么操作

定义一个函数calculator,该函数接收一个函数类型的参数op(即函数可以作为参数进行传递)

def main(args: Array[String]): Unit = {println(calculator(10, 20, op))def op(x: Int, y: Int): Int = {x + y}def calculator(a: Int, b: Int, op: (Int, Int) => Int): Int = {op(a, b)}}
  1. 每次使用calculator时,都需要完全定义一个函数op,好麻烦。简单的做法就是对op进行变形,即使用匿名函数

匿名函数:没有名字的函数,通过lambda表达式实现(参数)=>{函数体}

   def main(args: Array[String]): Unit = {println(calculator(10, 20, (x: Int, y: Int) => {x + y}))def calculator(a: Int, b: Int, op: (Int, Int) => Int): Int = {op(a, b)}}
  1. 以上即使使用了匿名函数,也没见少写多少代码,别急,下面对匿名函数进行简化

匿名函数的简化

简化4原则
(1)参数的类型可以省略,会根据形参进行自动的推导
(2) 类型省略之后,发现只有一个参数,则圆括号可以省略;其他情况:没有参数和参数超过1的永远不能省略圆括号
(3) 匿名函数体如果只有一行,则大括号也可以省略
(4)如果参数只出现一次,则参数省略且后面参数可以用_代替

承接上述案例实操

  • 因为可以根据calculator中的形参自动推导出op的实参类型,所有op的参数类型可以省略
println(calculator(10, 20, (x, y) => {x + y}))
  • 匿名函数体如果只有一行,则大括号也可以省略
println(calculator(10, 20, (x, y) => x + y))
  • 如果参数只出现一次,则参数可以省略,且后面参数可以用_代替
println(calculator(10, 20, _ + _)) // 只用这一条原则,就可以省略成这样

上述4条简化原则并不需要同时满足就可以简化

  1. 实现减法
// 只需要在增加一行代码即可
println(calculator(10, 20, _ - _))

到这里是不是就体现出匿名函数的简单了,这就是为什么使用匿名函数

注意:
类型省略之后,发现()内只有一个参数,则圆括号可以省略;其他情况:没有参数和参数超过1的永远不能省略圆括号

// 假设有这样的函数
println(calculator(10, 20, (x) => x))
// 发现只有一个参数,则圆括号可以省略
println(calculator(10, 20, x => x))// 还是上述的函数
println(calculator(10, 20, (x, y) => x + y))
// 圆括号不可以省略 如下形式
println(calculator(10, 20, x, y => x + y))
/*上述之所以可省略成 println(calculator(10, 20, _ + _)),
是因为满足简化原则任何一条就可省略(虽然不满足,类型省略之后,发现()内只有一个参数,则圆括号可以省略;其他情况:没有参数和参数超过1的永远不能省略圆括号,
但满足了参数只出现一次这条原则)*/

更多推荐

a10_scala 匿名函数 和 匿名函数的简化原则

本文发布于:2023-07-28 17:48:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1266983.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:函数   原则   a10_scala

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!