Kotlin:Apply和Also有什么区别?

申请和还有什么区别? 从我所知道的下面的代码做同样的事情:

应用

val person = Person().apply { name = "Tony Stark" age = 52 // More such stuff } 

 val person = Person().also { it.name = "Tony Stark" it.age = 52 // More such stuff } 

有什么区别,我应该使用一个吗? 另外,有些情况下,一个会工作,另一个不会?

定义:

 inline fun <T> T.also(block: (T) -> Unit): T (source) 

以此值为参数调用指定的功能块并返回此值。

应用

定义:

 inline fun <T> T.apply(block: T.() -> Unit): T (source) 

使用此值作为接收方调用指定的功能块并返回此值。

区别

这个函数also接收一个lambda表达式,在这个lambda表达式中,在lambda表达式中引用了一个名字(默认情况下)。

apply另一方面,使用与接收器的函数文字,所以在传递的lambda中,你不必添加额外的前缀来访问它的成员,如你在你的例子中看到的。

什么时候用什么

正如巴卡威所指出的那样,这个问题得到了回答 。