zoukankan      html  css  js  c++  java
  • Kotlin Standard.kt解析(also,apply,let.run...)

    函数名 定义inline的结构 函数体内使用的对象 返回值 是否是扩展函数 适用的场景
    also fun T.also(block: (T) -> Unit): T { block(this); return this } it指代当前对象 返回this

    适用于处理不为null的操作场景,即适用于let函数的任何场景。

    一般可用于多个扩展函数链式调用。

    apply fun T.apply(block: T.() -> Unit): T { block(); return this } this指代当前对象或者省略 返回this 1、适用于run函数的任何场景,一般用于初始化一个对象实例的时候,操作对象属性,并最终返回这个对象。
    2、动态inflate出一个XML的View的时候需要给View绑定数据也会用到。
    3、一般可用于多个扩展函数链式调用。
    4、数据model多层级包裹判空处理的问题。
    let fun <T, R> T.let(block: (T) -> R): R = block(this) it指代当前对象 闭包形式返回 适用于处理不为null的操作场景。
    run fun <T, R> T.run(block: T.() -> R): R = block() this指代当前对象或者省略 闭包形式返回 适用于let,with函数任何场景。
    run fun <R> run(block: () -> R): R = block() 不存在当前对象 闭包形式返回 调用指定的代码块并返回最后一行。
     takeIf   fun <T> T.takeIf(predicate: (T) -> Boolean): T? = if (predicate(this)) this else null it指代当前对象 返回this或null  
     takeUnless fun <T> T.takeUnless(predicate: (T) -> Boolean): T? = if (!predicate(this)) this else null it指代当前对象 返回this或null  
     with  fun <T, R> with(receiver: T, block: T.() -> R): R = receiver.block() this指代当前对象或者省略 闭包形式返回 适用于调用同一个类的多个方法时,可以省去类名重复,直接调用类的方法即可,经常用于Android中RecyclerView中onBinderViewHolder中,数据model的属性映射到UI上

    大部分参考了https://blog.csdn.net/u013064109/article/details/78786646

  • 相关阅读:
    Python 数据结构_队列
    Python 数据结构_堆栈
    基于SAP的中国式数据分析浅谈
    基于SAP的中国式数据分析浅谈
    logstash 处理nginx 错误日志
    logstash nginx 访问日志
    其中 (%{WORD:x_forword}|-) |表示或的意思
    grok 官方文档
    vCenter 部件关系简介 & 网络原理
    haproxy nginx 多路径
  • 原文地址:https://www.cnblogs.com/soclear/p/13545125.html
Copyright © 2011-2022 走看看