【Kotlin】Lambda表达式

1 常规调用

        Lambda 表达式总结 中对 Java 的 Lambda 表达式进行了总结,本文将对 Kotlin 中的 Lambda 表达式进行总结。

1.1 无参函数

fun main() {var myFun: () -> Unit = {println("test")}myFun() // 打印: test
}

        以上代码等价于: 

fun main() {var myFun: () -> Unit = fun() {println("test")}myFun() // 打印: test
}

1.2 有参函数

fun main() {var myFun: (String) -> Unit = { a ->println("test, $a")}myFun("abc") // 打印: test, abc
}

        以上代码等价于:

fun main() {var myFun: (String) -> Unit = fun(a: String) {println("test, $a")}myFun("abc") // 打印: test, abc
}

        当只有一个参数时,可以使用 it 简化 Lambda 表达式,如下。

fun main() {var myFun: (String) -> Unit = {println("test, $it")}myFun("abc") // 打印: test, abc
}

        如果不使用某个参数,可以使用下划线(_)简化,如下。 

fun main() {var myFun: (Int, Int) -> Unit = { _, b ->println("test, $b")}myFun(3, 5) // 打印: test, 5
}

1.3 有返回值函数

        Lambda 表达式中最后一行将作为返回值返回。

fun main() {var myFun: (Int, Int) -> Int = { a, b ->a + b}println(myFun(3, 5)) // 打印: 8
}

        以上代码等价于:

fun main() {var myFun: (Int, Int) -> Int = fun(a: Int, b: Int): Int {return a + b}println(myFun(3, 5)) // 打印: 8
}

2 尾随 Lambda 表达式

        当一个函数的最后一个参数是函数类型参数时,可以使用尾随 Lambda 表达式

2.1 无参函数

fun main() {outFun {println("inFun") // 打印: inFun}
}fun outFun(inFun: () -> Unit) {inFun()
}

2.2 有参函数

fun main() {outFun { a ->println(a) // 打印: abc}
}fun outFun(inFun: (String) -> Unit) {inFun("abc")
}

         当只有一个参数时,可以使用 it 简化 Lambda 表达式,如下。

fun main() {outFun {println(it) // 打印: abc}
}fun outFun(inFun: (String) -> Unit) {inFun("abc")
}

2.3 有返回值函数

fun main() {outFun { a, b ->a * b // 打印: 15}
}fun outFun(inFun: (Int, Int) -> Int) {println(inFun(3, 5))
}

2.4 外层函数有多个参数

        1)尾随函数类型

fun main() {outFun("abc") {println("inFun")}
}fun outFun(a: String, inFun: () -> Unit) {inFun() // 打印: inFunprintln("outFun, $a") // 打印: outFun, abc
}

        说明:当外层函数的最后一个参数是函数类型时,可以将 {} 提到 () 外面,该语法称为“尾随 Lambda 表达式”。

        2)非尾随函数类型

fun main() {outFun({println("inFun")}, "abc")
}fun outFun(inFun: () -> Unit, a: String) {inFun() // 打印: inFunprintln("outFun, $a") // 打印: outFun, abc
}

        说明:当外层函数的最后一个参数不是函数类型,前面的某个参数是函数类型时,必须将 {} 写到 () 里面。

3 return 使用

        Lambda 表达式中,不能直接使用 return 语句返回,需要结合标签一起使用,否则会编译报错(内联函数除外,详见 → 函数)。

3.1 无返回值函数

fun main() {var myFun: (Int) -> Unit = xxx@{if (it == 3) {println("return xxx")return@xxx}println("end, $it")}myFun(3) // 打印: return xxxmyFun(5) // 打印: end, 5
}

3.2 有返回值函数

fun main() {var myFun: (Int) -> String = xxx@{if (it == 3) {return@xxx "test1, $it"}return@xxx "test2, $it"}println(myFun(3)) // 打印: test1, 3println(myFun(5)) // 打印: test2, 5
}

3.3 尾随函数

        尾随 Lambda 表达式中,可以使用外层函数的名字作为 return 的标签名,也可以在 {} 前面自定义标签名。

fun main() {outFun {if (it == 3) {println("inFun, return")return@outFun}println("inFun")}
}fun outFun(inFun: (Int) -> Unit) {inFun(3) // 打印: inFun, return
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/729606.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【每日一问】Cookie、Session 和 Token 有什么区别?

Cookie、Session 和 Token 通常都是用来保存用户登录信息的技术,但三者有很大的区别,简单来说 Cookie 适用于简单的状态管理,Session 适用于需要保护用户敏感信息的场景,而 Token 适用于状态无关的身份验证和授权。 具体来说&…

大模型时代,华为与中软国际携手“打通AI落地应用最后一公里”

文 | 智能相对论 作者 | 叶远风 大模型驱动千行百业智能化变革已经成为广泛共识,下一步的问题是,企业要如何更好地推进? 近日,“2024中关村论坛系列活动——第二届北京人工智能产业创新发展大会”在北京国家会议中心成功举办&a…

每天一个数据分析题(一百九十四)

假如HS银行想进行用户购买理财产品情况研究的样本量确定和样本选取方法,下列说法哪些是正确的? A. 当我们不知道用户对某款理财产品是否感兴趣的具体比例时,通常假设 p0.5 来计算样本量。 B. 样本量的计算中,e 代表了希望对真值…

const shared_ptr<int>和shared_ptr<const int>的区别

const shared_ptr 和 shared_ptr 在 C 中表示两种不同的概念,尽管它们都与智能指针和常量性有关。下面是它们之间的主要区别: const shared_ptr 当你声明一个 const shared_ptr,你实际上是在声明一个指向 int 的智能指针,而这个…

零基础学习JS--基础篇--数字和日期

数字 javascript中常用的四种数字进制:十进制、二进制、八进制和十六进制。 这些进制都具有通用性,如果你有语言基础则可以略过,下面说一下指数形式。 指数形式: 0e-5 // 0 0e5 // 0 5e1 // 50 175e-2 // 1.75 1e3 …

MacOS终端命令行死循环

一、原因 (在vim ~/.bash_profile写了source ~/.bash_profile) 二、解决办法 1、contrl c 手动停止死循环 2、vim ~/.bash_profile (使用 Vim 编辑器打开 .bash_profile 文件) 3、键盘输入i进入编辑模式,编辑完成…

如何建站?

1. 选择域名:短且易记,与网站内容相关。 2. 购买主机:选择稳定、安全且价格合适的主机服务商。 3. 选择网站程序:根据需求选择网站类型,如博客、企业站、电商。 4. 设计网站:确定布局、导航、色彩&#xff…

[剑指offer] 数组中重复的数字

目录 1. 题目描述 2. 代码实现 1. 题目描述 📚 题目描述:在一个长度为 的数组里的所有数字都在 0 到 n−1 的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为 7 的数组…

yudao-cloud 学习笔记

前端代码 浏览器打开 https://cloud.iocoder.cn/intro/ F12 执行代码 var aaa $(".sidebar-group-items").find("a"); var ll[]; var tt[]; for(var i0;i<aaa.length;i ){ ll.push("https://doc.iocoder.cn" $(aaa[i]).attr("href&quo…

云计算 3月4号 (自配本地和远程yum源)

自建yum源 本地源 一、使用本地的镜像文件来制作yum源(做完记得删除) 1、挂载dvd镜像或将镜像拷贝到机器中 mkdir /yum-repo mount /dev/cdrom /yum-repo # 如果我们在设置中挂载了镜像使用这个方法 mount 镜像的路径 /yum-repo # 如果我们拷贝镜像到了系统中&#xff0c;可…

Docker 构建前端项目生成镜像

一、使用 Docker 构建前端项目镜像&#xff1a; 下载安装 Docker Desktop准备一个前端项目&#xff08;vue/react&#xff09;在项目的根目录新建名为 Dockerfile 的文件 # 设置基础镜像 FROM nginx:latest# 复制项目文件 COPY dist/ /usr/share/nginx/html/# 配置Nginx COPY…

PHP伪协议是什么?

PHP伪协议是一种特殊的URL协议&#xff0c;它允许PHP直接从PHP内部生成数据或者访问PHP自身处理的数据流&#xff0c;而不需要外部资源。这些协议是由PHP解释器内部定义和处理的&#xff0c;不同于HTTP、FTP、HTTPS等标准网络协议。下面是PHP伪协议的说明&#xff1a; 1. file…

Hi3516DV500+SC2210 AIISP 黑光相机

1. Hi3516DV500 Hi3516DV500是一颗面向行业市场推出的高清智能网络摄像头SoC。该芯片最高支持2路sensor输入&#xff0c;支持最高5M30fps的ISP图像处理能力&#xff0c;支持2F WDR、多级降噪、六轴防抖、多光谱融合等多种传统图像增强和处理算法&#xff0c;支持通过AI算法对输…

Java实战:Spring Boot 通过Filter 实现 Gzip 压缩超大 JSON 对象

本文将详细介绍如何使用 Spring Boot 集成 Filter&#xff0c;实现 Gzip 压缩超大 JSON 对象。我们将深入探讨 Gzip 压缩的原理&#xff0c;以及如何利用 Java 的 GZIPInputStream 和 GZIPOutputStream 类实现 JSON 对象的压缩和解压缩。 1. 引言 在当今的互联网时代&#xf…

第11周,第三期技术动态

大家好&#xff0c;才是真的好。 真没想到&#xff0c;本周是今年第十一周&#xff0c;2024年还有不到三百天就结束了。 今天周五&#xff0c;我们继续介绍与Domino相关产品新闻&#xff0c;以及互联网或其他IT行业动态等。 一、在Windows 10和Windows 11上运行Domino和Trav…

什么情况下导致索引失效

索引在数据库中起着加快数据检索速度的作用&#xff0c;但在某些情况下&#xff0c;索引可能会失效&#xff0c;即数据库系统无法有效地使用索引来加速查询。以下是一些常见导致索引失效的情况&#xff1a; 1. 未使用索引列进行查询&#xff1a; - 当查询条件中未使用索引列…

案例研究|辛格林电梯借助DataEase实现数据整合与智能展示

辛格林电梯&#xff08;SIGLEN&#xff09;于2012年创立&#xff0c;是电梯领域的领军品牌之一。该公司总部位于广东佛山&#xff0c;是全国首批获得A1级电梯制造资质的企业&#xff0c;拥有省级工程技术研究中心。辛格林电梯专注于研发和生产高品质电梯产品&#xff0c;涵盖别…

vector的STL操作

vector 是 C 标准模板库&#xff08;STL&#xff09;中实现的动态数组&#xff0c;它能够存储连续的元素&#xff0c;这些元素可以通过索引访问。与数组相比&#xff0c;vector 的大小可以动态变化&#xff0c;提供了许多便利的成员函数来管理其存储的元素。下面是 vector 的一…

一个用libcurl多线程下载断言错误问题的排查

某数据下载程序&#xff0c;相同版本的代码&#xff0c;在64位系统中运行正常&#xff0c;但在32位系统中概率性出现断言错误。一旦出现&#xff0c;程序无法正常继续&#xff0c;即使重启亦不行。从年前会上领导提出要追到根&#xff0c;跟到底&#xff0c;到年后的今天&#…

通过统一规划和团队整合,提升企业财务洞察

在当今快节奏的商业环境中&#xff0c;企业财务职能部门更应该采取更迅速的行动来适应这个社会。大部分企业期待更高效的战略决策&#xff0c;尤其是面临海量数据信息的堆叠。但是企业领导者应该知道&#xff0c;速度本身并不是最终目标&#xff0c;财务团队必须更快地完成工作…