文章目录

  • 一、 函数参数为 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 表达式作为参数的简略写法 | 唯一参数的简略写法 | 最后一个参数的简略写法 )相关推荐

  1. 学习Kotlin(五)函数与Lambda表达式

    推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...

  2. Kotlin学习笔记23 协程part3 lambda表达式深入 挂起函数 全局协程

    参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 1 lambda表达式深入 /*** lambda 表达式深入* 当函数参数是函数时 并且该函数只有一个参数 可以不传入任 ...

  3. 【Kotlin】Kotlin 函数总结 ( 具名函数 | 匿名函数 | Lambda 表达式 | 闭包 | 内联函数 | 函数引用 )

    文章目录 一.函数头声明 二.函数参数 1.默认参数值 2.具名参数 三.Unit 函数 四.TODO 函数抛出异常返回 Nothing 类型 五.反引号函数名 六.匿名函数 七.匿名函数的函数类型 ...

  4. 【Kotlin】Kotlin 中使用 Lambda 表达式替代对象表达式原理分析 ( 尾随 Lambda - Trailing Lambda 语法 | 接口对象表达式 = 接口#函数类型对象 )

    文章目录 一.尾随 Lambda - Trailing Lambda 语法 二.Kotlin 中使用 Lambda 表达式替代对象表达式原理 1.Lambda 替换对象表达式 2.原理分析 3.示例分 ...

  5. 【学习笔记】36、lambda是单表达式函数

    lambda是单表达式函数 一.lambda的定义 Python中的lambda关键字可用来快速声明小型匿名函数.lambda函数的行为与使用def关键字声明的常规函数一样,可以用于所有需要函数对象的 ...

  6. 【Kotlin】函数类型 ( 函数类型 | 带参数名称的参数列表 | 可空函数类型 | 复杂函数类型 | 带接收者函数类型 | 函数类型别名 | 函数类型实例化 | 函数调用 )

    文章目录 I . 函数类型 II . 带参数名的参数列表 III . 可空函数类型 IV . 复杂函数类型解读 V . 函数类型别名 VI . 带 接收者类型 的函数类型 VII . 函数类型实例化 ...

  7. 【Kotlin】Lambda 表达式 ( 简介 | 表达式语法 | 表达式类型 | 表达式返回值 | 调用方式 | 完整示例 )

    文章目录 I . Lambda 表达式 简介 II . Lambda 表达式语法 III . Lambda 表达式类型 IV . Lambda 表达式返回值 V . Lambda 表达式调用 VI . ...

  8. python中lambda 表达式(无参数、一个参数、默认参数、可变参数(*args、**kwargs)、带判断的lambda、列表使用lambda)

    如果⼀个函数有⼀个返回值,并且只有⼀句代码,可以使⽤ lambda简化. lambda语法: lambda 参数列表 : 表达式 注意: lambda表达式的参数可有可⽆,函数的参数在lambda表达 ...

  9. 自定义函数变量的设置(*/**),lambda匿名函数(map/filter/zip/enumerate)

    自定义函数变量的设置 一个星号 *传入元组,且这个变量为可变变量 两个星号 **后的那些参数被当做字典类型传递到函数中 带有双星号的可变参数只能出现在参数列表的最后 注意双星号是字典类型(字典形式要有 ...

最新文章

  1. android 多线程下载,断点续传,线程池
  2. css元素捕捉,css元素选择器
  3. 删除第一个_学习数据结构--第二章:线性表(顺序存储、插入、删除)
  4. Educational Codeforces Round 112 (Rated for Div. 2)(A-D)
  5. ReflectionPad2d--利用输入边界的反射来填充输入张量
  6. 精选9个不错的HTML5播放器
  7. color 的一些处理
  8. python多线程写日志_python 多线程logger问题
  9. pythoncharm安装配置_pycharm的安装与配置
  10. WPF - 属性系统 (4 of 4)
  11. form表单提交的时候,传过去的值是键值对的形式
  12. 交换机芯片与路由器芯片的区别
  13. ARM内核矩阵计算教程(STM32)
  14. 对战平台虚拟War3局域网的原理
  15. ceph存储 pg归置组处于stuck以及degraded状态解决方案
  16. keepass使用坚果云管理我的密码
  17. 网络流量监控软件——MRTG(Multi Router Traffic Grapher)
  18. 支持视频滤镜的播放器(lomo, 变形,纹理叠加等算法)
  19. make_layers 作用
  20. 单相逆变器重复控制。 采用重复控制与准比例谐振控制相结合的符合控制策略

热门文章

  1. 最直白理解NFC开发的三种工作模式
  2. esxi6.7安装win10
  3. vue 多层双层全选_vue2.0 实现全选和全不选
  4. FPGA实战-管脚分配相关及设置
  5. 数据库性能压测之TPC-C基准测试
  6. 一键切换语言(多语言插件vue-i18n的使用)
  7. 【医疗健康项目】传智健康项目(一)
  8. 云上铺会员管理收银系统 v1.8.9.5
  9. Android 桌面背景 设置
  10. python爬取大众点评(破解加密--css加密)