class MainActivity : AppCompatActivity() {
data class Person(var name: String, var age: Int)
val person = Person("test", 20)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var a = person.apply {
age
}
var b = person.also {
it.age
}
var c = person.let {
it.age
}
var d = person.run {
age
}
var e = with(person) {
age
}
}
}
- 从返回的类型看
apply,also都是返回对象本身,其余都是返回函数体中最后一行的值。
- 从传参来看
also,let都是 it,其余都是this。
- 从调用对象的属性来看
also,let都是需要 it. 这种方式获得属性,其余的可直接在函数体中调用属性。
需要注意的是run和with虽然很类似,但是有微妙的不同。将上述的run改变一下,
可以看到返回类型变为了Unit,age被传入了下方的run当中,变成了一种链式调用,这是with做不到的。