apply
所有功能跟also都一样。唯一不同的就是域内使用this调用
fun main(args : Array<String>){
var v1 = V()
v1.apply{
this.name = "fd"
}.t1("hi")
}
class V {
var name = "fd"
fun t1(v:String){
println("test1 $v $name")
}
}
所有功能跟also都一样。唯一不同的就是域内使用this调用
fun main(args : Array<String>){
var v1 = V()
v1.apply{
this.name = "fd"
}.t1("hi")
}
class V {
var name = "fd"
fun t1(v:String){
println("test1 $v $name")
}
}
also就是*.let ,只不过。这域的返回值是also对象本身。不再是最后一行
fun main(args : Array<String>){
var v1 = V()
v1.also{
it.name = "fd"
}.t1("hi")
}
class V {
var name = "fd"
fun t1(v:String){
println("test1 $v $name")
}
}
let就跟*.run一样。必须有对象,并且这对象会带进匿名函数里,名字叫it
fun main(args : Array<String>){
var v1 = "fd"
var v2:String?
v2 = v1?.let{
it + " hi"
}
println(v2)
}
run
可以將 run 想像成一個獨立出來的 Scope , run 會把最後一行的東西回傳或是帶到下一個 chain。
第一個例子像是:
(就是弄一个作用域出来,更SB一点做法就像if(true){})
fun main(args : Array<String>){
val test = "fd"
run{
val test = "fd2"
println("test2 $test")
}
println("test1 $test")
}
输出:
test2 fd2
test1 fd
2.*.run 就是省略前某对象名字。直接调用他的属性或方法:
fun main(args : Array<String>){
var v:V? = V()
v?.name = "fd"
v?.run{
v.t1("hi")
}
}
class V {
var name = "fd"
fun t1(v:String){
println("test1 $v $name")
}
}
3.run 是支持返回值的
fun main(args : Array<String>){
val v1 = run{
"xxx yyy"
}
println(v1)
}
4.组合作用
fun main(args : Array<String>){
println("hi run:" + run{
"hahaha run"
})
run{
var v = V()
v.name = "fd"
println("test2 ${v.name}")
v // 这个对象。作为返回对象
}.t1("vvvv")
}
class V {
var name = "fd"
fun t1(v:String){
println("test1 $v $name")
}
}