前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【Kotlin】标准库函数 ③ ( with 标准库函数 | also 标准库函数 )

【Kotlin】标准库函数 ③ ( with 标准库函数 | also 标准库函数 )

作者头像
韩曙亮
发布2023-03-30 18:41:48
发布2023-03-30 18:41:48
83200
代码可运行
举报
运行总次数:0
代码可运行

文章目录

Kotlin 语言中 , 在 Standard.kt 源码中 , 为所有类型定义了一批标准库函数 , 所有的 Kotlin 类型都可以调用这些函数 ;

一、with 标准库函数


with 函数 与 run 函数 功能是一样的 ,

其使用形式不同 , with 函数是 独立使用的 ,

调用时 , 需要 将 接收者实例对象 作为 with 函数的 参数 ;

with 函数原型 :

代码语言:javascript
代码运行次数:0
运行
复制
/**
 * 以给定的[receiver]作为接收者调用指定的函数[block]并返回其结果。
 *
 * 有关详细使用信息,请参阅[scope functions]的文档
 * (https://kotlinlang.org/docs/reference/scope-functions.html#with)。
 */
@kotlin.internal.InlineOnly
public inline fun <T, R> with(receiver: T, block: T.() -> R): R {
    contract {
        callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    }
    return receiver.block()
}

with 函数的第一个参数是 receiver: T 接收者 ,

第二个参数是 block: T.() -> R , 是 T.() -> R 类型的 Lambda 表达式 ;

代码示例 :

代码语言:javascript
代码运行次数:0
运行
复制
fun main() {
    val str = with("hello") {
        capitalize()
    }
    println(str)
}

执行结果 :

代码语言:javascript
代码运行次数:0
运行
复制
Hello

上述 with 函数的执行效果与下面的 run 函数执行效果是相同的 ;

代码示例 :

代码语言:javascript
代码运行次数:0
运行
复制
fun main() {
    val str = "hello".run {
        capitalize()
    }
    println(str)
}

执行结果 :

代码语言:javascript
代码运行次数:0
运行
复制
Hello

二、also 标准库函数


also 函数 功能与 let 函数 功能 类似 ;

also 函数 将 接收者 ( 函数调用者 ) 作为参数传递给 Lambda 表达式参数 ,

并返回 接收者实例对象本身 ;

also 函数 与 let 函数 返回值不同 ,

also 函数 返回 接收者对象本身 ,

let 函数 返回 Lambda 表达式的最后一行 ;

also 函数 返回 接收者对象本身 , 那么就可以使用该特性 , 对 接收者 执行 函数式编程的 链式调用 ;

代码示例 :

代码语言:javascript
代码运行次数:0
运行
复制
fun main() {
    val str = "hello".also {
        println(it)
    }.also {
        // 该对象的生命周期仅限于该闭包
        println(it.capitalize())
    }

    // 最终打印的是最初的 接收者对象
    println(str)
}

执行结果 :

代码语言:javascript
代码运行次数:0
运行
复制
hello
Hello
hello
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-01-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、with 标准库函数
  • 二、also 标准库函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档