TL;DR Différence
En also
reçoit un lambda, auquel T
est passé dans l'implémentation, donc à l'intérieur de la lambda vous y faites référence avec un nom ( it
par défaut, peut être renommé { otherName -> ...}
).
val person = Person().also {
it.name = "Tony Stark"
}
En apply
d'autre part, une fonction littérale avec récepteur est utilisé, de sorte qu'à l'intérieur de la lambda passée, il n'est pas nécessaire d'ajouter des préfixes supplémentaires pour accéder à ses membres, comme vous le voyez dans ce qui suit. Le récepteur peut être référencé par this
.
val person = Person().apply {
name = "Tony Stark"
}
également
Déclaration :
inline fun <T> T.also(block: (T) -> Unit): T (source)
Appelle le bloc fonctionnel spécifié avec this
(le récepteur) comme argument et renvoie this
(le destinataire).
appliquer
Déclaration :
inline fun <T> T.apply(block: T.() -> Unit): T (source)
Appelle le bloc fonctionnel spécifié avec this
comme son destinataire et renvoie this
(le destinataire).
quand utiliser quoi
Des exemples d'utilisation sont expliqués dans ce document fil .