【Kotlin】函数 ⑥ ( 函数参数为 Lambda 表达式 | Lambda 表达式作为参数的简略写法 | 唯一参数的简略写法 | 最后一个参数的简略写法 )
文章目录
- 一、 函数参数为 Lambda 表达式
- 二、Lambda 表达式作为参数的简略写法
- 1、Lambda 表达式作为唯一参数的简略写法
- 2、Lambda 表达式作为最后一个参数的简略写法
一、 函数参数为 Lambda 表达式
在 定义函数 时 , 函数的参数 可以是 函数类型的变量 ,
可以传递一个 匿名函数 作为 函数参数 ;
匿名函数 就是 Lambda 表达式 ;
代码示例 : 在下面的代码中 ,
- 函数参数 :
studentDoSomething
函数的 第三个参数为 action: (String, Int) -> String
,
其参数类型为 (String, Int) -> String
, 是一个 函数类型 ;
- 函数类型变量 :
在 main
函数中 , 定义函数类型变量 actionFun
, 之后 该变量会作为函数参数传递给函数 ,
同时使用了 匿名函数 , 为该函数类型变量 actionFun
赋值 ;
- 匿名函数类型自动推断 :
在该 匿名函数中 , 使用了 自动类型推断 , 在函数体中的参数列表 ,
声明了 完整的 参数名:参数类型 , name: String, age: Int ->
;
- 函数变量作函数参数 :
在最后 , 将 函数类型 变量 actionFun
传递给了 studentDoSomething
函数 , 作为其第三个参数使用 ;
fun main() {// 定义函数类型变量, 之后作为函数参数传递给函数val actionFun = { name: String, age: Int ->"student $name $age years old, say hello"}// 调用 studentDoSomething 函数, 输入姓名, 年龄, 执行的操作studentDoSomething("Tom", 18, actionFun);
}fun studentDoSomething(name: String, age: Int,action: (String, Int) -> String) {val act = action(name, age);println(act)
}
执行结果 :
student Tom 18 years old, say hello
二、Lambda 表达式作为参数的简略写法
1、Lambda 表达式作为唯一参数的简略写法
如果 Lambda 表达式 作为 函数参数 , 并且 该参数是 唯一参数 , 那么 Lambda 表达式外面的圆括号可以省略 ;
代码示例 :
fun main() {// 调用 doSomething 函数, 传入 Lambda 表达式 / 匿名函数doSomething({"Hello World"})
}fun doSomething(action: () -> String) {val act = action();println(act)
}
此时将鼠标移动到 Lambda 表达式 上 , 也就是匿名函数中 , 会提示
Lambda argument should be moved out of parentheses
参数应该移出圆括号
Kotlin 建议我们移除 Lambda 表达式 外面的圆括号 ;
修改后的代码示例 :
fun main() {// 调用 doSomething 函数, 传入 Lambda 表达式 / 匿名函数doSomething {"Hello World"}
}fun doSomething(action: () -> String) {val act = action();println(act)
}
执行结果 :
2、Lambda 表达式作为最后一个参数的简略写法
如果 Lambda 表达式 作为 函数参数 , 并且 该参数是 若干参数的最后一个参数 , 那么 Lambda 表达式可以提到括号外面 ;
在上一个章节的如下代码 , 可以直接 将 匿名函数 作为函数参数进行传递 , 不必使用 函数类型 变量名作为参数 ,
fun main() {// 定义函数类型变量, 之后作为函数参数传递给函数val actionFun = { name: String, age: Int ->"student $name $age years old, say hello"}// 调用 studentDoSomething 函数, 输入姓名, 年龄, 执行的操作studentDoSomething("Tom", 18, actionFun);
}
直接使用匿名函数作为函数参数 的效果 :
fun main() {// 调用 studentDoSomething 函数, 输入姓名, 年龄, 执行的操作studentDoSomething("Tom", 18, { name: String, age: Int ->"student $name $age years old, say hello"})
}
匿名函数 , 也就是 Lambda 表达式 作为最后一个参数 , 可以提取到括号外面 , 代码效果如下 :
fun main() {// 调用 studentDoSomething 函数, 输入姓名, 年龄, 执行的操作studentDoSomething("Tom", 18) { name: String, age: Int ->"student $name $age years old, say hello"}
}
最终的简化后的代码示例 :
fun main() {// 调用 studentDoSomething 函数, 输入姓名, 年龄, 执行的操作studentDoSomething("Tom", 18) { name: String, age: Int ->"student $name $age years old, say hello"}
}fun studentDoSomething(name: String, age: Int,action: (String, Int) -> String) {val act = action(name, age);println(act)
}
执行结果 :
student Tom 18 years old, say hello
【Kotlin】函数 ⑥ ( 函数参数为 Lambda 表达式 | Lambda 表达式作为参数的简略写法 | 唯一参数的简略写法 | 最后一个参数的简略写法 )相关推荐
- 学习Kotlin(五)函数与Lambda表达式
推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...
- Kotlin学习笔记23 协程part3 lambda表达式深入 挂起函数 全局协程
参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 1 lambda表达式深入 /*** lambda 表达式深入* 当函数参数是函数时 并且该函数只有一个参数 可以不传入任 ...
- 【Kotlin】Kotlin 函数总结 ( 具名函数 | 匿名函数 | Lambda 表达式 | 闭包 | 内联函数 | 函数引用 )
文章目录 一.函数头声明 二.函数参数 1.默认参数值 2.具名参数 三.Unit 函数 四.TODO 函数抛出异常返回 Nothing 类型 五.反引号函数名 六.匿名函数 七.匿名函数的函数类型 ...
- 【Kotlin】Kotlin 中使用 Lambda 表达式替代对象表达式原理分析 ( 尾随 Lambda - Trailing Lambda 语法 | 接口对象表达式 = 接口#函数类型对象 )
文章目录 一.尾随 Lambda - Trailing Lambda 语法 二.Kotlin 中使用 Lambda 表达式替代对象表达式原理 1.Lambda 替换对象表达式 2.原理分析 3.示例分 ...
- 【学习笔记】36、lambda是单表达式函数
lambda是单表达式函数 一.lambda的定义 Python中的lambda关键字可用来快速声明小型匿名函数.lambda函数的行为与使用def关键字声明的常规函数一样,可以用于所有需要函数对象的 ...
- 【Kotlin】函数类型 ( 函数类型 | 带参数名称的参数列表 | 可空函数类型 | 复杂函数类型 | 带接收者函数类型 | 函数类型别名 | 函数类型实例化 | 函数调用 )
文章目录 I . 函数类型 II . 带参数名的参数列表 III . 可空函数类型 IV . 复杂函数类型解读 V . 函数类型别名 VI . 带 接收者类型 的函数类型 VII . 函数类型实例化 ...
- 【Kotlin】Lambda 表达式 ( 简介 | 表达式语法 | 表达式类型 | 表达式返回值 | 调用方式 | 完整示例 )
文章目录 I . Lambda 表达式 简介 II . Lambda 表达式语法 III . Lambda 表达式类型 IV . Lambda 表达式返回值 V . Lambda 表达式调用 VI . ...
- python中lambda 表达式(无参数、一个参数、默认参数、可变参数(*args、**kwargs)、带判断的lambda、列表使用lambda)
如果⼀个函数有⼀个返回值,并且只有⼀句代码,可以使⽤ lambda简化. lambda语法: lambda 参数列表 : 表达式 注意: lambda表达式的参数可有可⽆,函数的参数在lambda表达 ...
- 自定义函数变量的设置(*/**),lambda匿名函数(map/filter/zip/enumerate)
自定义函数变量的设置 一个星号 *传入元组,且这个变量为可变变量 两个星号 **后的那些参数被当做字典类型传递到函数中 带有双星号的可变参数只能出现在参数列表的最后 注意双星号是字典类型(字典形式要有 ...
最新文章
- android 多线程下载,断点续传,线程池
- css元素捕捉,css元素选择器
- 删除第一个_学习数据结构--第二章:线性表(顺序存储、插入、删除)
- Educational Codeforces Round 112 (Rated for Div. 2)(A-D)
- ReflectionPad2d--利用输入边界的反射来填充输入张量
- 精选9个不错的HTML5播放器
- color 的一些处理
- python多线程写日志_python 多线程logger问题
- pythoncharm安装配置_pycharm的安装与配置
- WPF - 属性系统 (4 of 4)
- form表单提交的时候,传过去的值是键值对的形式
- 交换机芯片与路由器芯片的区别
- ARM内核矩阵计算教程(STM32)
- 对战平台虚拟War3局域网的原理
- ceph存储 pg归置组处于stuck以及degraded状态解决方案
- keepass使用坚果云管理我的密码
- 网络流量监控软件——MRTG(Multi Router Traffic Grapher)
- 支持视频滤镜的播放器(lomo, 变形,纹理叠加等算法)
- make_layers 作用
- 单相逆变器重复控制。 采用重复控制与准比例谐振控制相结合的符合控制策略