J'essaie une fonction littérale avec un exemple de récepteur à Kotlin, basé sur ce tutoriel:
https://kotlineXperTise.com/coping-with-kotlins-fonctions-fonctions/ Je m'attends à obtenir 3 revenir à partir du code ci-dessous, mais il semble que la méthode INT () n'est pas exécutée ou la variable "MINT" n'est pas mise à jour. P>
/ a> fun summer(block: Int.() -> Unit): Int{
var myint = 5
myint.block()
return myint
}
fun main(args: Array<String>) {
var mint = summer{
dec()
dec()
}
println(mint)
}
4 Réponses :
Je pense que c'est parce que DEC () est un opérateur et ne modifie pas la valeur sous-jacente.
Par exemple, vous exécutez ce code, vous devriez voir que je ne change jamais, notez l'utilisation de VAL NON VAR, dans votre exemple idée doit vous donner un indice.
Si vous enveloppez l'int dans une classe, vous pouvez voir comment fonctionne la fonction avec un récepteur.
ne fonctionne pas: p> fonctionne: p> inc () code> et
déc () code> Ne pas muté l'objet qu'ils sont invoqués. Au lieu de cela, ils renvoient une copie mutée de l'objet:
Auteur de cet article ici. Votre fonction de la fonction code> code> de votre
code> ne renvoie rien, vous devez modifier le type à
bloc: int. () -> int code> puis renvoie son Réponse:
class Ref(var v: Int) {
fun dec() {
v -= 1
}
}
fun summer(block: Ref.() -> Unit): Int {
val ref = Ref(5).apply(block)
return ref.v
}
fun main(args: Array<String>) {
val mint = summer {
dec()
dec()
}
println(mint)
}
Je pense que c'est parce que déc () est un opérateur qui renvoie la valeur mais ne change pas l'objet lui-même.