kotlin-拉姆达表达式

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值