当前位置:网站首页>【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大厂面试题(有解析)
领取地址:
边栏推荐
- On February 14, 2022, learn the imitation Niuke project - develop the registration function
- Go language - Reflection
- 【点云处理之论文狂读前沿版9】—Advanced Feature Learning on Point Clouds using Multi-resolution Features and Learni
- Move anaconda, pycharm and jupyter notebook to mobile hard disk
- LeetCode 513. 找树左下角的值
- 【点云处理之论文狂读经典版8】—— O-CNN: Octree-based Convolutional Neural Networks for 3D Shape Analysis
- 2022-2-13 learn the imitation Niuke project - Project debugging skills
- Common penetration test range
- 剑指 Offer II 029. 排序的循环链表
- [point cloud processing paper crazy reading frontier version 11] - unsupervised point cloud pre training via occlusion completion
猜你喜欢
[point cloud processing paper crazy reading classic version 12] - foldingnet: point cloud auto encoder via deep grid deformation
npm install安装依赖包报错解决方法
Liteide is easy to use
Data mining 2021-4-27 class notes
LeetCode 508. 出现次数最多的子树元素和
剑指 Offer II 029. 排序的循环链表
LeetCode 1089. 复写零
数位统计DP AcWing 338. 计数问题
精彩回顾|I/O Extended 2022 活动干货分享
LeetCode 532. K-diff number pairs in array
随机推荐
Go language - IO project
2022-1-6 Niuke net brush sword finger offer
[point cloud processing paper crazy reading frontier edition 13] - gapnet: graph attention based point neural network for exploring local feature
LeetCode 532. K-diff number pairs in array
LeetCode 871. Minimum refueling times
剑指 Offer II 091. 粉刷房子
数字化管理中台+低代码,JNPF开启企业数字化转型的新引擎
Use the interface colmap interface of openmvs to generate the pose file required by openmvs mvs
Jenkins learning (I) -- Jenkins installation
What are the stages of traditional enterprise digital transformation?
Education informatization has stepped into 2.0. How can jnpf help teachers reduce their burden and improve efficiency?
Computing level network notes
2022-2-14 learning xiangniuke project - Session Management
The difference between if -n and -z in shell
浅谈企业信息化建设
We have a common name, XX Gong
LeetCode 57. Insert interval
The method of replacing the newline character '\n' of a file with a space in the shell
State compression DP acwing 91 Shortest Hamilton path
The less successful implementation and lessons of RESNET