带接收者的lambda:“with”与“apply”

lambda函数体内可以调用一个不同对象的方法,无序借助任何额外的限定符,这样的lambda叫做带接收者的lambda

1.1、with函数

fun alphabet():String{

     val resul = StringBuffer()

      return with(StringBuffer){

               for(letter  in 'A'..'Z'){

                      this.append(letter) //通过显示的this来调用接收者值的类型

               }

               append("\nNow  I Konw  the alphabet")//可以省略this

               this.toString()   //从lambda返回值

       }

}

with实际上接收了两个参数的函数。with函数把它的第一个参数转换成作为第二个参数传递给它的lambda的接收者。this指向了stringBuilder,这是传给with的第一个参数。可以通过显示的this引用来访问stringBuilder的方法。

fun alphabet() = with(StringBuffer()){  //重构

               for(letter  in 'A'..'Z'){

                      append(letter)

               }

               append("\nNow  I Konw  the alphabet")//可以省略this

               toString()   //从lambda返回值

}

1.2、apply函数

apply函数和with函数几乎一模一样。唯一区别apply始终会返回作为实参数传递给他的对象(返回接收者对象)

fun alphabet() =StringBuilder().apply{

              for(letter  in 'A'..'Z'){

                      append(letter)

               }

               append("\nNow  I Konw  the alphabet")//可以省略this

} .toString()   //从lambda返回值

apply 被声明成一个扩展函数。它的接收者变成了作为实参的lambda的接收者(即StringBuilder被传入lambda中)。执行apply的结果为StringBuilder。

buildString的实参也是一个带接收者的lambda,其接收者就是StringBuilder

fun alphabet() =buildString{

              for(letter  in 'A'..'Z'){

                      append(letter)

               }

               append("\nNow  I Konw  the alphabet")//可以省略this

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 写在开头:本人打算开始写一个Kotlin系列的教程,一是使自己记忆和理解的更加深刻,二是可以分享给同样想学习Kot...
    胡奚冰阅读 1,408评论 0 6
  • 定义 Lambda表达式,本质上就是可以传递其他函数的一小段代码。有了lambda,可以轻松的把通用的代码结构抽取...
    m1Ku阅读 614评论 0 0
  • 本文是在学习和使用kotlin时的一些总结与体会,一些代码示例来自于网络或Kotlin官方文档,持续更新... 对...
    竹尘居士阅读 3,477评论 0 8
  • 1.要求他更明晰地说出来:你的焦虑是什么?不管他13岁前还是8岁前,与父亲有关还是与母亲有关。你的欲望,你的策略,...
    青云风阅读 769评论 1 0
  • 等人的片刻闲着无聊打开了微信,在朋友圈里又遇到到了《轮回》这篇文章。这篇文章明明读了很多遍,再遇到的时候却还想再看...
    静待花开芬芳来阅读 7,218评论 0 2

友情链接更多精彩内容