//总结在前面 let 、with、run 的返回值是lamda表达式的最后一行语句(apply 、also也是)但apply 、also 返回的是this
// let、also 传递的是it ,run with apply 传递的是 this
import bean.Person
import com.sun.xml.internal.fastinfoset.util.StringArray
fun main() {
// let()
// with()
// letUse()
// runTest()
// runTest2()
//applyTest
//with 、run 、apply lamda表达里传的都是this 而let和also则lamda表达式里传递的是 it also 返回的是其自身
//let 、run、with 返回的是lamda表达式的最后一行 apply also 返回的是 是其调用者本身
}
private fun applyTest() {
//apply返回的是其自身 this 而 let with和 run 返回的都是lamda表达式的最后一行 let with run 函数定义最后返回的是return block
//而apply 返回的是this 如何想让run达到 apply的效果最后一行返回this就ok了
val result = Person("雨来", 20).apply {
name = "胡文鹏"
age = 18
}
println(result.name)
result?.apply {
//这里的对象还是 Person
}?.name?.apply {
//在这里你发现对象已经变为name了
length
}?.apply {
//在这里你发现对象已经变为name了
}
}
private fun runTest2() {
val person = Person("雨来", 32)
val result = person.run {
name = "胡雨来"
age = 33
this
}
println(result.name)
}
private fun runTest() {
//run lamda表达式的最后一行也是其返回值 两种方式调用一种像 let一样 一种向with一样
var charArrayOf = charArrayOf('a', 'b', 'c', 'f', 'e')
run {
val result = "";
//最后一行也是返回值
result
}
//上面也是一种使用方式
val result = charArrayOf?.run {
onEach {
println("条目${it}")
}
//最后一行为返回值
"run也是是最后一行是返回值"
}
println(result)
}
private fun letUse() {
var number: String? = null
number?.let {
println("是判空的")
}
}
private fun with() {
var charArrayOf = charArrayOf('a', 'b', 'c', 'f', 'e')
val result = with(charArrayOf) {
println(size)
//有可能为空
this?.forEach {
println(it)
}
//也是最后一行返回值
"with也是最后一行的返回值"
}
println(result)
}
private fun let() {
var intArray = intArrayOf(10, 20, 30, 40, 50, 60)
val result = intArray?.let {
it.onEach { item ->
println(item)
}
//let可以判空可 lamda表达式最后一行为返回值
"最后一行为let表达式的返回值"
}
println(result)
}
网友评论