当前位置:网站首页>【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大厂面试题(有解析)

领取地址:

边栏推荐
- Introduction to the basic application and skills of QT
- 【点云处理之论文狂读经典版11】—— Mining Point Cloud Local Structures by Kernel Correlation and Graph Pooling
- Build a solo blog from scratch
- Methods of checking ports according to processes and checking processes according to ports
- AcWing 788. Number of pairs in reverse order
- We have a common name, XX Gong
- 【点云处理之论文狂读前沿版10】—— MVTN: Multi-View Transformation Network for 3D Shape Recognition
- Beego learning - JWT realizes user login and registration
- What is an excellent fast development framework like?
- 浅谈企业信息化建设
猜你喜欢

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

npm install安装依赖包报错解决方法

AcWing 786. 第k个数

传统企业数字化转型需要经过哪几个阶段?

dried food! What problems will the intelligent management of retail industry encounter? It is enough to understand this article

20220630 learning clock in

What are the stages of traditional enterprise digital transformation?

Sword finger offer II 091 Paint the house

Move anaconda, pycharm and jupyter notebook to mobile hard disk

AcWing 785. Quick sort (template)
随机推荐
LeetCode 324. Swing sort II
传统办公模式的“助推器”,搭建OA办公系统,原来就这么简单!
Shell script kills the process according to the port number
干货!零售业智能化管理会遇到哪些问题?看懂这篇文章就够了
We have a common name, XX Gong
Go language - JSON processing
AcWing 787. 归并排序(模板)
[point cloud processing paper crazy reading classic version 12] - foldingnet: point cloud auto encoder via deep grid deformation
Simple use of MATLAB
[point cloud processing paper crazy reading classic version 8] - o-cnn: octree based revolutionary neural networks for 3D shape analysis
AcWing 788. 逆序对的数量
LeetCode 241. 为运算表达式设计优先级
Debug debugging - Visual Studio 2022
Beego learning - JWT realizes user login and registration
LeetCode 715. Range 模块
剑指 Offer II 091. 粉刷房子
Excel is not as good as jnpf form for 3 minutes in an hour. Leaders must praise it when making reports like this!
MySQL installation and configuration (command line version)
【点云处理之论文狂读经典版10】—— PointCNN: Convolution On X-Transformed Points
Solve POM in idea Comment top line problem in XML file