let
1.let函数返回类型,是根据匿名函数的最后一行变化而变化
2.let函数中的匿名函数里面持有的是it == 集合自身
fun main() {var num1 = 1var num2 = 1var result:Intresult = num1 + num2var str = result?.let {//传入本身,it指代本身即result,result不为空则执行let,为空则不执行println("传进来的值为${it}")"${num1} + ${num2} = ${result}" //此处为返回的值}?:"传进来的值为null"print(str)
}
传进来的值为2
1 + 1 = 2
apply
apply: info:apply
1.apply函数返回类型,都是info自身
2.apply函数中的匿名函数里面持有的是this == info自身
run
run:str.run
1.run函数返回类型,是根据匿名函数最后一行变化而变化
2.run函数中的匿名函数里面持有的是this == str自身
fun runFunction(){val str = "yuknight"val r = str.run {//this == strtrue}println(r)//run中匿名函数val strRun = str.run {str.length > 5}.run {if (this) "字符串合格" else "字符串不合格"}.run {"[$this]"}println(strRun)//run中使用具名函数val strRun1 = str.run(::isLong).run(::showText)//::表示引用函数.run(::mapText)println(strRun1)
}fun isLong(str: Stri
true
[字符串合格]
[字符串合格]
with
with with(str)
1.with函数返回类型,是根据匿名函数最后一行变化而变化
2.with函数中的匿名函数里面持有的是this == str自身.
3.跟run在使用的时候不一样
fun isLong(str: String) = str.length > 5
fun showText(isLong: Boolean) = if (isLong) "字符串合格" else "字符串不合格"
fun mapText(getShow: String) = "[$getShow]"
fun getStrLen(str: String) = str.length
fun getLenInfo(len: Int) = "字符长度:$len"
fun getInfoMap(info: String) = "[$info]"
fun getshow(content: String) = println(content)fun withMethod() {val str = "yuknight"val length = with(str) {this.length//this == str //返回类型为匿名函数里面最后一行}println(length)val r1 = wi
与run不同的是width需要传入参数
also
also str.also
1.also函数返回类型,都是str自身
2.also函数中的匿名函数里面持有的是it == str自身.
fun alsoMethod() {val str = "YuKnight"str.also {it.length //it == strprintln("$it") //返回值为str自身}//str.also特点,可以链式调用str.also {println("str原始数据是:$it")}.also {println("str转换成小写:${it.toLowerCase()}")}.also {println("链式调用结算 ${it}")}
}
YuKnight
str原始数据是:YuKnight
str转换成小写:yuknight
链式调用结算 YuKnight
总结
方法 | 返回值 | 自身指代 | 是否传参 |
---|---|---|---|
let | 最后一行 | it | 否 |
apply | 自身 | this | 否 |
run | 最后一行 | this | 否 |
with | 最后一行 | this | 是 |
also | 自身 | it | 否 |