由于在kotlin中,可以很容易扩展已有的类,增加新的函数。这是扩展函数中,就可以使用this关键字,指代运行时与该函数关联的类的对象。
而有时我们发现在写Lambda时,可以使用it关键字,同时还可以使用this关键字,这是怎么回事?
比如下边的代码,在test01()方法中,it指代lambda函数本身的参数,而this,是指Test01这个对象。
总之,使用this的地方,都指向一个对象,使用it的地方,都指向该函数本身的参数。至于this指向哪儿,要具体分析。
import org.junit.jupiter.api.Test
class Family{
val member = mutableListOf<String>("Father", "Mother", "Daughter")
}
fun Family.doSomething(action: (String) -> Unit){
this.member.forEach {
action(it)
}
}
class Test01 {
val fatherName = "tom"
@Test
fun test01(){
Family().doSomething {
println("$it is watching movie")
println("The father's name is ${this.fatherName}")
}
}
}