美文网首页程序员
kotlin 中with run apply 调用与区别

kotlin 中with run apply 调用与区别

作者: coke613 | 来源:发表于2022-09-26 16:03 被阅读0次

    在kotlin中可以直接调用的函数,叫做标准函数. with run apply 是比较常见,但它们三者之间也是有区别的.

    with

    with 直接调用,有两个参数. 第一个是数据对象,第二个是lambda表达式.其中lambda表达式中持有参数一数据对象的上下文,没有返回值.

      with("hello world"){
           val msg =  replace("hello","hi")
           println(msg)
       }
    
    // 控制台打印  hi world
    

    run

    需要数据对象调用,有一个lambda参数.同样lambda表达式中也持有数据对象的上下文. 有返回值.

     val sbRun =  StringBuffer().run {
            append(1)
            append(2)
            append(3)
            append(4)
            append(5)
      }
      println(sbRun.toString())
    
    // 控制台打印  12345
    

    apply

    需要数据对象调用,和run类似有一个lambda参数,同样lambda表达式中也持有数据对象的上下文. 有返回值.

    val sbApply =  StringBuffer().apply {
            append(9)
            append(8)
            append(7)
      }
     println(sbApply.append(65).toString())
    
    // 控制台打印  98765
    

    run 与 apply 区别

    如果仅仅上看上面的代码,两个函数直接是没有区别的, 如果把run 示例代码修改成如下,控制台输出是什么结果呢?

     val sbRun =  StringBuffer().run {
            append("a")
            append("b")
            append("c")
            888888
      }
     println(sbRun.toString())
    
    
    // 控制台打印 888888
    
    run.png

    打印结果是 lambda表达式最后一行代码.并且类型是Int. 而不是StringBuffer. 那么在来看看apply函数.

    apply.png

    上面控制台打印结果: 你好呀. 丝毫不受lambda表达式最后一行的影响.

    总结

    with 直接调用不需要数据对象. 有两个参数.没有返回值.
    run 需要数据对象调用,只有一个参数,有返回值. 将lambda表达式中最后一行代码作为返回值返回.
    apply 需要数据对象调用,只有一个参数,有返回值. 将调用者数据对象作为返回值返回.
    run 和 apply 函数很像,但是返回值不一样.

    相关文章

      网友评论

        本文标题:kotlin 中with run apply 调用与区别

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