1 前言

大家好,我是楚生辉,在未来的日子里我们一起来学习大数据相关的技术,一起努力奋斗,遇见更好的自己!

本文详细的介绍了scala的匿名函数,有需要的小伙伴可以学习~

Scala 中定义匿名函数的语法很简单,箭头左边是参数列表,右边是函数体。

使用匿名函数后,我们的代码变得更简洁了,让我们程序员估计关注于逻辑处理

下面的表达式就定义了一个接受一个Int类型输入参数,返回值为x+1匿名函数:

(x:Int) => x+1

2.快速入门

没有名字的函数就是匿名函数。(x:Int)=>{函数体}

x:表示输入参数类型;Int:表示输入参数类型;函数体:表示具体代码逻辑

在快速入门的案例中,我们定义了一个dualFunction函数,在这个函数中,传入一个函数作为参数,实现简单的加减运算

def main(args: Array[String]): Unit = {// 定义一个二元运算函数,只操作1与2两个数,但是具体的运算通过参数传递def dualFunction(fun:(Int,Int) => Int ) : Int = {fun(1,2)}// 定义 add与minus两个匿名函数val add = (a:Int,b:Int) => a + bval minus = (a:Int,b:Int) => a - bprintln(dualFunction(add))println(dualFunction(minus))// 或者我们可以直接把匿名函数定义在参数中println(dualFunction((a:Int,b:Int) => a + b))println(dualFunction((a:Int,b:Int) => a - b))// 因为a与b只出现过一次,所以直接可以用_来代替,如果顺序是b-a,我们可以转化为// -a + b  也即 -_ + _println(dualFunction(_ + _))println(dualFunction(_ - _))
}

3.案例实操

3.1 传递一个参数

需求 1:传递的函数有一个参数

传递匿名函数至简原则:

  • 参数的类型可以省略,会根据形参进行自动的推导
  • 类型省略之后,发现只有一个参数,则圆括号可以省略;其他情况:没有参数和参 数超过 1 的永远不能省略圆括号。
  • 匿名函数如果只有一行,则大括号也可以省略
  • 如果参数只出现一次,则参数省略且后面参数可以用_代替
def main(args: Array[String]): Unit = {// (1)定义一个函数:参数包含数据和逻辑函数def operation(arr: Array[Int], op: Int => Int) = {for (elem <- arr) yield op(elem)}// (2)定义逻辑函数def op(ele: Int): Int = {ele + 1}// (3)标准函数调用val arr = operation(Array(1, 2, 3, 4), op)println(arr.mkString(","))// (4)采用匿名函数val arr1 = operation(Array(1, 2, 3, 4), (ele: Int) => {ele + 1})println(arr1.mkString(","))// (4.1)参数的类型可以省略,会根据形参进行自动的推导;val arr2 = operation(Array(1, 2, 3, 4), (ele) => {ele + 1})println(arr2.mkString(","))// (4.2)类型省略之后,发现只有一个参数,则圆括号可以省略;其他情况:没有参数和参数超过 1 的永远不能省略圆括号。val arr3 = operation(Array(1, 2, 3, 4), ele => {ele + 1})println(arr3.mkString(","))// (4.3) 匿名函数如果只有一行,则大括号也可以省略val arr4 = operation(Array(1, 2, 3, 4), ele => ele + 1)println(arr4.mkString(","))//(4.4)如果参数只出现一次,则参数省略且后面参数可以用_代替val arr5 = operation(Array(1, 2, 3, 4), _ + 1)println(arr5.mkString(","))
}

3.2 传递两个参数

需求 2:传递的函数有两个参数

object TestFunction {def main(args: Array[String]): Unit = {def calculator(a: Int, b: Int, op: (Int, Int) => Int): Int = {op(a, b)}// (1)标准版println(calculator(2, 3, (x: Int, y: Int) => {x + y}))// (2)如果只有一行,则大括号也可以省略println(calculator(2, 3, (x: Int, y: Int) => x + y))// (3)参数的类型可以省略,会根据形参进行自动的推导;println(calculator(2, 3, (x , y) => x + y))// (4)如果参数只出现一次,则参数省略且后面参数可以用_代替println(calculator(2, 3, _ + _))}
}

3.3 多层嵌套函数

定义一个函数func,它接受一个一个Int类型的参数,返回一个函数f1,它返回的函数fi,接受一个String类型的参数,同样返回一个函数f2,函数f2接收一个Char类型的参数,返回一个Boolean的值,如果传入0,空字符串,0就返回false

def main(args: Array[String]): Unit = {def func(i: Int): String => (Char => Boolean) = {def f1(s: String): Char => Boolean = {def f2(c: Char): Boolean = {if (i == 0 && s == "" && c == '0') false else true}f2}f1}println(func(0)("")('0'))println(func(0)("")('1'))
}// 返回值为
false
true

func(0)("")('0') func(0)代表f1,func(0)(“”)则代表的f2

Scala匿名函数Lambda表达式详解相关推荐

  1. java拉姆达表达式事例,Java Lambda表达式详解和实例

    简介 Lambda表达式是Java SE 8中一个重要的新特性.lambda表达式允许你通过表达式来代替功能接口. lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体( ...

  2. Java8 Lambda表达式详解手册及实例

    先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号"程序新视界",好好系列的学习一下 ...

  3. 好程序员前端教程之JavaScript闭包和匿名函数的关系详解...

    好程序员前端教程之JavaScript闭包和匿名函数的关系详解 本文讲的是关于JavaScript闭包和匿名函数两者之间的关系,从匿名函数概念到立即执行函数,最后到闭包.下面一起来看看文章分析,希望你 ...

  4. python 匿名函数示例_扣丁学堂Python3开发之匿名函数用法示例详解

    扣丁学堂Python3开发之匿名函数用法示例详解 2018-07-26 14:01:11 1324浏览 今天扣丁学堂Python培训给大家分享关于Python3匿名函数用法,结合实例形式分析了Pyth ...

  5. C++11新特性中的匿名函数Lambda表达式的汇编实现分析(二)

    2019独角兽企业重金招聘Python工程师标准>>> C++11新特性中的匿名函数Lambda表达式的汇编实现分析(一) 首先,让我们来看看以&方式进行变量捕获,同样没有参 ...

  6. java lambda表达式详解_Java8新特性Lambda表达式详解

    课程目标: 通过本课程的学习,详细掌握Java8新特性之Lambda表达式: 适用人群:有Java基础的开发人员: 课程概述:从Java 8出现以来lambda是最重要的特性之一,它可以让我们用简洁流 ...

  7. 【Kotlin】Kotlin 函数总结 ( 具名函数 | 匿名函数 | Lambda 表达式 | 闭包 | 内联函数 | 函数引用 )

    文章目录 一.函数头声明 二.函数参数 1.默认参数值 2.具名参数 三.Unit 函数 四.TODO 函数抛出异常返回 Nothing 类型 五.反引号函数名 六.匿名函数 七.匿名函数的函数类型 ...

  8. C# Lambda表达式详解,及Lambda表达式树的创建

    每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默.我眼中的程序员大多都不 ...

  9. 14_python基础—匿名函数lambda表达式

    文章目录 一.lambda 表达式 1.1 lambda的应用场景 1.2 lambda语法 快速入门 1.3 示例:计算a + b 1.3.1 函数实现 1.3.2 lambda实现 1.4 lam ...

最新文章

  1. ASP.NET基础教程-DataTable类对象-属性方法和事件
  2. 推荐8个能极大提高办公效率的软件,让你告别加班
  3. python遍历文件夹下所有文件大小_python遍历文件夹读取文件大小 | 学步园
  4. avformat_alloc_output_context2 -22错误
  5. proc文件的简单读写
  6. 最新的Java SE平台和JDK版本发布计划
  7. 关于JAVA中子类和父类的构造方法
  8. ArcMap中的名称冲突问题
  9. JDK 9中已弃用Java的Observer和Observable
  10. 远控免杀专题1---基础篇
  11. C/C++蓝桥杯1 备赛准备
  12. 安卓mysql插入数据_Android批量插入数据到SQLite数据库的方法
  13. Python中的staticmethod和classmethod
  14. 史上最简易无人机,仅有一个螺旋桨
  15. java html模板_Java实现静态页面模板替换内容代码
  16. 借助echarts制作酷炫3d地球动画
  17. C++实现控制台迷宫小游戏
  18. c#实现短信发送程序
  19. springcontext.xml 中方言是红色的_12种方言都能听懂!讯飞智能录音笔A1评测:小如钥匙坠+复古磁带造型...
  20. 【山无遮,海无拦】LeetCode题集 线性枚举之最值算法

热门文章

  1. 02.17 Kalevitch and Chess
  2. 我眼中的设计模式(3)
  3. HTML点击元素以外任意地方隐藏该元素
  4. 采用matlab编制含电气热的综合能源优化程序,采用yalmip和cplex求解,通过二阶锥模型实现相关约束限制
  5. 由于缺少调试目标,无法开始调试。请生成项目并重试,或者相应的设置OutputPath和AssemblyName属性,使其指向目标程序集的正确位置。
  6. 2.14调情方案之个性情人节
  7. [USACO17DEC]Haybale Feast G
  8. solidworks中装配体如何旋转一个零件
  9. XPS电脑没有声音的问题
  10. android百度定位定位点返回非常慢,Android 定位之百度地图定位 问题总结