标准函数指的是在任何地方任意对象都能调用的几个函数,定义在Standard.kt文件中,这里对几个常用的标准函数进行介绍。
let
let函数接收一个Lambda表达式作为参数,无返回值,作用为给调用对象执行所给的Lambda代码,示例如下:
// 不使用let写法:
student?.study()
student?.sing()
student?.eat()
// 使用let写法:
student?.let {
study()
sing()
eat()
}
apply
apply函数接收一个Lambda表达式作为参数,无返回值,或者说返回值为自己本身,其作用为对调用对象执行修改,类似于Builder对象等,示例代码如下:
// 不使用apply写法
val intent = Intent(mContext, Second::class.java)
intent.putExtra("key1", "value1")
intent.putExtra("key2", "value2")
intent.putExtra("key3", "value3")
// 使用apply写法
val intent = Intent(mContext, Second::class.java)
intent.apply {
putExtra("key1", "value1")
putExtra("key2", "value2")
putExtra("key3", "value3")
}
run
run函数接收一个Lambda表达式作为参数,返回值为Lambda表达式最后一行,作用为对调用对象数据执行操作后返回操作后的数据,着重点在于获取调用对象的数据,而对调用对象不关心。示例代码如下
// 不使用run
val list = listOf("tom", "jack", "tim")
val sb = StringBuilder()
for (l in list) {
sb.append(l)
}
return sb.toString()
// 使用run
val list = listOf("tom", "jack", "tim")
StringBuilder().run {
for (l in list) {
// 操作对象为调用者StringBuilder()
append(l)
}
// 这行(最后一行)将作为返回值返回
toString()
}
with
与上面几个函数不同,with函数不需要调用者,它接收2个参数:要获取数据的对象、Lambda表达式,with函数和run函数非常相似,区别在于with把run中的调用对象当成参数传入了。
// 不使用with
val list = listOf("tom", "jack", "tim")
val sb = StringBuilder()
for (l in list) {
sb.append(l)
}
return sb.toString()
// 使用with
// 这里利用了Lambda特性把Lambda表达式写在了括号外面
with(StringBuilder()) {
for (l in list) {
// 操作对象为第一个参数StringBuilder()
append(l)
}
// 这行(最后一行)将作为返回值返回
toString()
}