当前位置:网站首页>【Kotlin学习】高阶函数的控制流——lambda的返回语句和匿名函数
【Kotlin学习】高阶函数的控制流——lambda的返回语句和匿名函数
2022-07-03 08:59:00 【安卓老猴子】
高阶函数的控制流
lambda中的返回语句:从一个封闭的函数返回
在一个普通循环中使用return

在传递给forEach的lambda中使用return

如果你在lambda中使用return关键字,他会从调用lambda的函数中返回,并不只是从lambda返回。这样的return语句叫作非局部返回,因为它从一个比包含return的代码块更大的代码块中返回了。我们可以类比在java中的for循环和synchronized代码块,显然会从函数中返回
要注意只有在以lambda作为参数的函数是内联函数的时候才能从更外层的函数返回。上图forEach的函数体和lambda的函数体一起被内联了,所以在编译的时候很容易做到从包含它的函数中返回。在一个非内联函数的lambda中使用return是不允许的。一个非内联函数可以把传给它的lambda保存在变量中,以便在函数返回以后可以继续使用
从lambda返回:使用标签返回
可以在lambda表达式中使用局部返回,lambda中的局部返回跟for循环中的break表达式相似。它会终止lambda的执行,并接着从调用lambda的代码处执行。要区分局部返回和非局部返回,需要用到标签。想从一个lambda表达式返回你可以标记它,然后在return关键字后引用这个标签

要标记一个lambda表达式,在lambda的花括号之前放一个标签名,接着放一个@符号。要从一个lambda返回,在return关键字后放一个@符号,再加上标签名
另一种是使用lambda作为参数的函数的函数名可以作为标签,比如forEach 
如果你显式地指定了lambda表达式的标签,再使用作为标签没有任何效果,一个lambda表达式的标签数量不能多于一个
带标签的this表达式
如果你给带接收者的lambda指定标签,就可以通过对应的带有标签的this表达式访问它的隐式接收者

匿名函数:默认使用局部返回

匿名函数看起来和普通函数相似

匿名函数和普通函数由相同的指定返回值类型的规则,代码块体匿名函数需要显式指定返回类型,如果使用表达式函数体就可以省略返回类型
使用表达式函数体匿名函数

在匿名函数中,不带标签的return表达式会从匿名函数返回,而不是从包含匿名函数的函数返回。
规则:return从最近的使用fun关键字声明的函数返回。lambda没有使用fun关键字,所以lambda中的return从最外层的函数返回,而匿名函数使用了fun。尽管匿名函数看起来跟普通函数很相似,但它其实是lambda表达式的另一种语法形式而已
文末
我总结了一些Android核心知识点,以及一些最新的大厂面试题、知识脑图和视频资料解析。
需要的小伙伴直接点击文末小卡片免费领取哦,以后的路也希望我们能一起走下去。(谢谢大家一直以来的支持,需要的自己领取)
Android学习PDF+架构视频+面试文档+源码笔记
部分资料一览:
- 330页PDF Android学习核心笔记(内含8大板块)


- Android学习的系统对应视频

- Android进阶的系统对应学习资料

- Android BAT大厂面试题(有解析)

领取地址:

边栏推荐
- MySQL installation and configuration (command line version)
- AcWing 788. Number of pairs in reverse order
- Gaussian elimination acwing 883 Gauss elimination for solving linear equations
- 一个优秀速开发框架是什么样的?
- 【毕业季|进击的技术er】又到一年毕业季,一毕业就转行,从动物科学到程序员,10年程序员有话说
- [advanced feature learning on point clouds using multi resolution features and learning]
- 2022-2-14 learning the imitation Niuke project - send email
- LeetCode 438. 找到字符串中所有字母异位词
- 【Kotlin学习】运算符重载及其他约定——重载算术运算符、比较运算符、集合与区间的约定
- Complex character + number pyramid
猜你喜欢

数字化管理中台+低代码,JNPF开启企业数字化转型的新引擎

剑指 Offer II 029. 排序的循环链表

We have a common name, XX Gong

Excel is not as good as jnpf form for 3 minutes in an hour. Leaders must praise it when making reports like this!

In the digital transformation, what problems will occur in enterprise equipment management? Jnpf may be the "optimal solution"

LeetCode 535. TinyURL 的加密与解密

Pic16f648a-e/ss PIC16 8-bit microcontroller, 7KB (4kx14)
![[point cloud processing paper crazy reading frontier version 8] - pointview gcn: 3D shape classification with multi view point clouds](/img/ee/3286e76797a75c0f999c728fd2b555.png)
[point cloud processing paper crazy reading frontier version 8] - pointview gcn: 3D shape classification with multi view point clouds

LeetCode 508. 出现次数最多的子树元素和

干货!零售业智能化管理会遇到哪些问题?看懂这篇文章就够了
随机推荐
Wonderful review | i/o extended 2022 activity dry goods sharing
Vscode connect to remote server
STM32F103 can learning record
[point cloud processing paper crazy reading classic version 14] - dynamic graph CNN for learning on point clouds
[point cloud processing paper crazy reading classic version 8] - o-cnn: octree based revolutionary neural networks for 3D shape analysis
[advanced feature learning on point clouds using multi resolution features and learning]
[point cloud processing paper crazy reading classic version 11] - mining point cloud local structures by kernel correlation and graph pooling
【点云处理之论文狂读经典版12】—— FoldingNet: Point Cloud Auto-encoder via Deep Grid Deformation
LeetCode 30. Concatenate substrings of all words
[point cloud processing paper crazy reading classic version 12] - foldingnet: point cloud auto encoder via deep grid deformation
Instant messaging IM is the countercurrent of the progress of the times? See what jnpf says
Problems in the implementation of lenet
2022-2-14 learning xiangniuke project - generate verification code
数字化转型中,企业设备管理会出现什么问题?JNPF或将是“最优解”
2022-2-13 learn the imitation Niuke project - Project debugging skills
Method of intercepting string in shell
With low code prospect, jnpf is flexible and easy to use, and uses intelligence to define a new office mode
Uc/os self-study from 0
LeetCode 871. 最低加油次数
LeetCode 324. Swing sort II