美文网首页
Kotlin 作用域函数

Kotlin 作用域函数

作者: 莫库施勒 | 来源:发表于2019-04-11 18:02 被阅读0次
@kotlin.internal.InlineOnly
public inline fun <T, R> T.run(block: T.() -> R): R {
    contract {
        callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    }
    return block()
}

@kotlin.internal.InlineOnly
public inline fun <T, R> with(receiver: T, block: T.() -> R): R {
    contract {
        callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    }
    return receiver.block()
}

@kotlin.internal.InlineOnly
public inline fun <T> T.apply(block: T.() -> Unit): T {
    contract {
        callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    }
    block()
    return this
}

@kotlin.internal.InlineOnly
@SinceKotlin("1.1")
public inline fun <T> T.also(block: (T) -> Unit): T {
    contract {
        callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    }
    block(this)
    return this
}

@kotlin.internal.InlineOnly
public inline fun <T, R> T.let(block: (T) -> R): R {
    contract {
        callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    }
    return block(this)
}

上面是常用的五个作用域函数 run let with apply also
从定义上我们看出
apply 和 also 返回的是 this ,他们的区别是 also 可以重命名 this
而 with let run 返回的都是运行后的结果,let 和 run 的区别是 let 可以重命名 this
with 容易识别,因为它的用法和其他有明显的区别,所以也不需要重命名

功能 对象参考 返回值 扩展方法
let it Lambda结果
run this Lambda结果
run - Lambda结果 否:没有上线问对象调用
with this Lambda结果 否:将上下文对象作为参数
apply this 上下文对象
also it 上下文对象

此外还有 takeIf 和 takeUnless , 它们都是返回自己或null

@kotlin.internal.InlineOnly
@SinceKotlin("1.1")
public inline fun <T> T.takeIf(predicate: (T) -> Boolean): T? {
    contract {
        callsInPlace(predicate, InvocationKind.EXACTLY_ONCE)
    }
    return if (predicate(this)) this else null
}

@kotlin.internal.InlineOnly
@SinceKotlin("1.1")
public inline fun <T> T.takeUnless(predicate: (T) -> Boolean): T? {
    contract {
        callsInPlace(predicate, InvocationKind.EXACTLY_ONCE)
    }
    return if (!predicate(this)) this else null
}

相关文章

  • 详解Kotlin中的作用域函数

    Kotlin作用域函数 作用域函数,Kotlin在语法层面支持拓展函数,作用域函数,作用域函数是指对数据做一些变换...

  • kotlin中Scope函数

    Scope函数翻译过来就叫作用域函数吧,Kotlin中的作用域函数包含let, run with, apply, ...

  • Kotlin修炼指南

    Kotlin修炼指南 作用域函数 作用域函数是Kotlin中的一个非常有用的函数,它主要分为两种,一种是拓展函数式...

  • Kotlin 常用作用域函数,区别和使用

    1. 有关作用域函数: Kotlin 中有很多作用域函数, 但是常见的使用场景是不同的。 常见的五种作用域函数 l...

  • [Kotlin Tutorials 10] Scope Func

    Scope Functions: Kotlin中的作用域函数 Kotlin标准库提供了5个scope functi...

  • Kotlin 作用域函数

    1、作用域函数区别表 学习方法:取上述demo,将let、run、with、apply、also相互替换更改试试K...

  • kotlin 作用域函数

    kotlin 作用域函数 作用:它们的唯一目的是在对象的上下文中执行代码块。当对一个对象调用这样的函数并提供一个 ...

  • Kotlin作用域函数

    kotlin中经常出现run、with、let、also、apply,开始时候容易迷糊,有什么用有什么区别? 一:...

  • Kotlin:作用域函数

    前言 最近使用kotlin语言开发了新的项目,kotlin的一些特性和大量的语法糖相当好用,相比于java,开发效...

  • Kotlin 作用域函数

    上面是常用的五个作用域函数 run let with apply also从定义上我们看出apply 和 also...

网友评论

      本文标题:Kotlin 作用域函数

      本文链接:https://www.haomeiwen.com/subject/pzjxwqtx.html