1.run函数返回类型是根据匿名函数最后一行的类型变化而变化
run 函数里面持有的是this
fun main() {
val info="kotlin is ok"
var r= info.run {
true
}
println(r)
}
执行结果
2.run搭配具名函数
package Stage3
fun main() {
val info="kotlin is ok"
var r= info.run {
true
}
println(r)
//搭配具名函数
//info.run(具名函数)
//this==info:String;this==info.run(::isLength):Boolean;this==var r2=info.run(::isLength).run (::isNormal):String
var r2=info.run(::isLength).run (::isNormal).run (::println)
}
fun isNormal(b: Boolean)=if(b)"合格" else "不合格"
fun isLength(s: String)=if(s.length>5) true else false
执行结果
3.对比使用匿名函数的方法实现上面的具名
package Stage3
fun main() {
val info="kotlin is ok"
var r= info.run {
true
}
println(r)
//搭配具名函数
//info.run(具名函数)
//this==info:String;this==info.run(::isLength):Boolean;this==var r2=info.run(::isLength).run (::isNormal):String
var r2=info.run(::isLength).run (::isNormal).run (::println)
//匿名方法
info.run {
if (length>20) true else false
}.run {
if(this)"合格" else "不合格"
}.run {
println(this)
}
}
fun isNormal(b: Boolean)=if(b)"合格" else "不合格"
fun isLength(s: String)=if(s.length>5) true else false
执行结果
4.因为和let一样都是取决于函数最后一行的类型变化而变化返回值,因此let也可以实现上面的内容
package Stage3
fun main() {
val info="kotlin is ok"
var r= info.run {
true
}
println(r)
//搭配具名函数
//info.run(具名函数)
//this==info:String;this==info.run(::isLength):Boolean;this==var r2=info.run(::isLength).run (::isNormal):String
var r2=info.run(::isLength).run (::isNormal).run (::println)
//匿名方法
info.run {
if (length>20) true else false
}.run {
if(this)"合格" else "不合格"
}.run {
println(this)
}
//let实现
info.let {
if (it.length>20) true else false
}.let {
if(it)"合格" else "不合格"
}.let {
println(it)
}
var r3=info.let(::isLength).let (::isNormal).let (::println)
}
fun isNormal(b: Boolean)=if(b)"合格" else "不合格"
fun isLength(s: String)=if(s.length>5) true else false
执行结果