文章目录

  • 一、 函数参数为 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兼容性测试CTS Verifier-环境搭建、测试执行、结果分析
  2. php怎么看回调的异步通知的数据_php app支付宝回调(异步通知)详解
  3. 重新安装python2.6 和 yum (不可以直接安装yum yum 依赖于python2.6)
  4. 【蓝桥杯单片机】【51拓展】PCA寄存器配置实现硬件输出PWM
  5. matplotlib中的plot_importance画图大小控制
  6. python复制指定字符串_python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)...
  7. Jquery.dataTables分页排序参数详解
  8. 一款开源的中国象棋人工智能程序
  9. PMP-质量管理7种质量工具详细对比
  10. Oracle 行转列的坑
  11. 影响中国青年的100句人生名言 1
  12. 集成开发项目与开发集成项目的区别
  13. 程序员练级(转自酷壳)
  14. javaFX学习之scene场景的概念
  15. 【深度学习】综述 | 深度学习的最新进展
  16. Pinterest 3.0 for iOS设计过程——升级iOS7设计思路详解
  17. 工厂如何提升生产环境管理水平?动环监控排第几
  18. 信用评分之二--信用评分中的评分卡中的A卡、B卡和C卡
  19. 6个习惯让你立刻远离拖延
  20. shell脚本进入某个目录返回当前目录写法

热门文章

  1. js键盘事件中的键码对照表
  2. imx6ull的DMA实现的linux用户程序和驱动模块程序源码
  3. 网络编程入门(JavaSE)
  4. 安卓11新特性与开发适配
  5. 如何使用Java技术实现微信公众号海报裂变功能
  6. 快手极速版薅羊毛+脚本+抓包教程+环境变量配置 保姆级别教程 (2022/5/13 更新)
  7. 高速ADC的正确布板、元件选择及布局指南
  8. C++ OpenCV使用大津法求自适应阈值
  9. python爬虫大众点评店铺信息(字体加密)
  10. 使用CARLA模拟器实现DQN自动驾驶(一)安装环境