Kotlin - 标准函数with、run和apply
Kotlin的标准函数是指 Standard.kt 文件中定义的函数,任何Kotlin代码都可以自由地调用所有的标准函数。
1.with 函数
首先先从with函数开始,with函数接受两个参数,第一个参数可以是一个任意类型的对象,第二个参数是一个Lambda表达式。with函数会在Lambda表达式中提供第一个参数对象的上下文,并且使用Lambda表达式中的最后一行代码作为返回值进行返回,代码如下:
-
val with = with(obj) {
-
//这里是 obj 的上下文
-
"value" //with 函数的返回值
-
}
那么这个函数有什么用的? 它可以在连续同一个对象的多个方法时让代码变得精简,下面描述一个具体的例子:
-
val listOf = listOf<String>("Apple", "Banana", "Orange", "Pear", "Grape")
-
val obj = StringBuffer()
-
obj.append("Start eating fruits.\n")
-
for (s in listOf) {
-
obj.append(s).append("\n")
-
}
-
obj.append("Ate all fruits.")
-
val result = obj.toString()
-
println(result)
这样我们连续调用了很多次obj对象的方法。其实这个时候就可以考虑使用with函数来让代码变得精简:
-
val listOf = listOf<String>("Apple", "Banana", "Orange", "Pear", "Grape")
-
val result = with(StringBuffer()) {
-
-
append("Start eating fruits.\n")
-
for (s in listOf) {
-
append(s).append("\n")
-
}
-
append("Ate all fruits.")
-
toString()
-
-
}
-
-
Log.d("TAG", "initData: $result")
2.run函数
run函数的用法和使用场景和上面with类似,只是稍微做了一些语法的改动。首先run函数通常不会直接调用,而是要在某个对象的基础上调用;其实run函数只接受一个Lambda参数,并且在Lambda表达式中提供调用对象的上下文。其它方面和with一样,包括也会使用Lambda表达式中的最后一行代码作为返回值返回。示例如下:
-
val result = obj.run {
-
//这里是obj的上下文
-
"value" //run函数的返回值
-
}
-
val listOf = listOf<String>("Apple", "Banana", "Orange", "Pear", "Grape")
-
val result = StringBuffer().run {
-
-
append("Start eating fruits.\n")
-
for (s in listOf) {
-
append(s).append("\n")
-
}
-
append("Ate all fruits.")
-
toString()
-
-
}
-
-
Log.d("TAG", "initData: $result")
总体来说,变化非常小,只是将with函数并传入StringBuffer对象改成了StringBuffer对象的run方法,其它没有任何区别,这两段代码执行的结果也是一样的。
3.apply函数
apply函数和run函数也是及其类似,都是要在某个对象上调用,并且只接受一个Lambda参数,也会在Lambda表达式中提供对象的上下文,但是apply函数无法定义返回值,而是会自动返回调用对象本身,示例代码如下:
-
val result = obj.apply {
-
//这里是obj的上下文
-
}
-
//result == obj
现在我们再使用apply函数修改一下吃水果这段代码 , 如下:
-
val listOf = listOf<String>("Apple", "Banana", "Orange", "Pear", "Grape")
-
val result = StringBuffer().apply {
-
-
append("Start eating fruits.\n")
-
for (s in listOf) {
-
append(s).append("\n")
-
}
-
append("Ate all fruits.")
-
}
-
-
Log.d("TAG", "initData: ${result.toString()}")
由于apply函数无法定义返回值,只能返回调用对象本身,因此这里result实际上是一个StringBuffer对象,所以在最后打印的时候还要再调用它的toSting()方法才行。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgcbkjh
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01