当前位置:网站首页>【Android Kotlin】lambda的返回语句和匿名函数
【Android Kotlin】lambda的返回语句和匿名函数
2022-07-04 12:33:00 【不秃头de程序猿】
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交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。
边栏推荐
- C语言:求字符串的长度
- The most robust financial products in 2022
- French Data Protection Agency: using Google Analytics or violating gdpr
- [Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 21
- 16. Memory usage and segmentation
- Exness: positive I win, negative you lose
- [Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 9
- queue
- Global and Chinese markets for soluble suture 2022-2028: Research Report on technology, participants, trends, market size and share
- Jetson TX2 configures common libraries such as tensorflow and pytoch
猜你喜欢
MPLS experiment
Show recent errors only command /bin/sh failed with exit code 1
Introduction to the button control elevatedbutton of the fleet tutorial (the tutorial includes the source code)
Memory computing integration: AI chip architecture in the post Moorish Era
MySQL advanced review
Jetson TX2配置Tensorflow、Pytorch等常用库
17.内存分区与分页
01. Basics - MySQL overview
[notes] in depth explanation of assets, resources and assetbundles
Clion configuration of opencv
随机推荐
DC-5靶机
Possible to restore a backup of SQL Server 2014 on SQL Server 2012?
When synchronized encounters this thing, there is a big hole, pay attention!
Paper notes ACL 2020 improving event detection via open domain trigger knowledge
queue
Global and Chinese markets of digital PCR and real-time PCR 2022-2028: Research Report on technology, participants, trends, market size and share
[Android reverse] function interception instance (③ refresh CPU cache | ④ process interception function | ⑤ return specific results)
IIS error, unable to start debugging on the webserver
AI should take code agriculture? Deepmind offers a programming version of "Alpha dog" alphacode that surpasses nearly half of programmers!
Kivy教程之 08 倒计时App实现timer调用(教程含源码)
16.内存使用与分段
Googgle guava ImmutableCollections
The detailed installation process of Ninja security penetration system (Ninjitsu OS V3). Both old and new VM versions can be installed through personal testing, with download sources
[Yunju entrepreneurial foundation notes] Chapter II entrepreneur test 16
R language -- readr package reads and writes data
nn. Exploration and experiment of batchnorm2d principle
Servlet learning notes
Lvs+kept highly available cluster
16. Memory usage and segmentation
Global and Chinese markets of NOx analyzers 2022-2028: Research Report on technology, participants, trends, market size and share