博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
kotlin-拉姆达表达式
阅读量:5906 次
发布时间:2019-06-19

本文共 1231 字,大约阅读时间需要 4 分钟。

lamuda表达式标准用法

val sum = { x: Int, y: Int -> x + y }复制代码

下面通过几个更复杂的例子说明,lamuda表达式的几种用法

1."-,"表示参数未使用

map.forEach { _, value -> println("$value!") }复制代码

2.大多数lamuda不会返回数据类型,除了匿名函数类(和普通函数不同,匿名函数不需要申明)

fun(x: Int, y: Int): Int = x + y复制代码

也可以式下面表示

fun(x: Int, y: Int): Int {    return x + y}复制代码

匿名函数类和lamuda区别:匿名函数类只能在括号内传递,lamuda可以在括号外。如:

ints.filter(fun(item) = item > 0)复制代码

注:在 Kotlin 中有一个约定:如果函数的最后一个参数接受函数,那么作为相应参数传入的 lambda 表达式可以放在圆括号之外:

val product = items.fold(1) { acc, e -> acc * e }复制代码

如果该 lambda 表达式是调用时唯一的参数,那么圆括号可以完全省略:

run { println("...") }复制代码

3.带有接收者的函数类型,例如 A.(B) -> C

复制代码

4.取别名

typealias ClickHandler = (Button, ClickEvent) -> Unit复制代码

5.运行规则:从右到左,可为空

如需将函数类型指定为可空,请使用圆括号:((Int, Int) -> Int)?。函数类型可以使用圆括号进行接合:(Int) -> ((Int) -> Unit)箭头表示法是右结合的,(Int) -> (Int) -> Unit 与前述示例等价,但不等于 ((Int) -> (Int)) -> Unit。复制代码

6.函数类

class IntTransformer: (Int) -> Int {    override operator fun invoke(x: Int): Int = TODO()}val intFunction: (Int) -> Int = IntTransformer()复制代码
val stringPlus: (String, String) -> String = String::plus复制代码

7.max是高阶函数,下面两个是等价

max(strings, { a, b -> a.length < b.length })复制代码
fun compare(a: String, b: String): Boolean = a.length < b.length复制代码

转载于:https://juejin.im/post/5cada34c5188251b061bea85

你可能感兴趣的文章
pycharm配置mysql数据库连接访问
查看>>
Spring源码学习:第0步--环境准备
查看>>
烂泥:rsync与inotify集成实现数据实时同步更新
查看>>
call & apply
查看>>
学习英语哦
查看>>
第六届蓝桥杯java b组第四题
查看>>
通过TortoiseGIT怎么把本地项目上传到GitHub
查看>>
Python 1 Day
查看>>
Python基础学习笔记(十:二进制位运算)
查看>>
C语言中字符串结束符
查看>>
技术工作者上升到思想,哲学层面也许更好
查看>>
LCD12864使用总结
查看>>
wireshark简明教程
查看>>
EditPlus配置Java编译器
查看>>
app已损坏,打不开。你应该将它移到废纸篓
查看>>
Switchover and Failover说明
查看>>
linux 环境RPM 安装MYSQL5.6
查看>>
Linux文件管理和编辑常用命令
查看>>
bluz-5.47 蓝牙
查看>>
C++ 读写文件
查看>>