Compte tenu de la fonction foo:
fun foo(m: String, bar: (m: String) -> Unit) {
bar(m)
}
Nous pouvons faire:
foo("a message", { println("this is a message: $it") } )
//or
foo("a message") { println("this is a message: $it") }
Maintenant, disons que nous avons la fonction suivante:
fun buz(m: String) {
println("another message: $m")
}
Existe-t-il un moyen de passer "buz" comme paramètre à "foo"? Quelque chose comme:
foo("a message", buz)
fun something() { foo("hi", { buz(it) }) }
this::function
bar: ((m: String) -> Unit)?
m
est pour foo, l'autre paramètre est le nom du paramètre du type de fonction passé en barre de variable à la fonction.À propos de la fonction membre en tant que paramètre:
code:
la source
Kotlin 1.1
utiliser
::
pour référencer la méthode.comme
la source
Utilisez simplement "::" avant le nom de la méthode
foo(::bar)
Sortie :Hello World
la source
apparemment, ce n'est pas encore pris en charge.
Plus d'informations:
http://devnet.jetbrains.com/message/5485180#5485180
http://youtrack.jetbrains.com/issue/KT-1183
la source
Si vous voulez passer les méthodes setter et getter .
Usage:
la source
La réponse de Jason Minard est bonne. Cela pourrait également être réalisé en utilisant un fichier
lambda
.Qui peut être appelé avec
foo("a message", buz)
.Vous pouvez également rendre cela un peu plus SEC en utilisant un fichier
typealias
.la source
Un autre exemple:
la source
Les fonctions de première classe ne sont actuellement pas prises en charge dans Kotlin. Il y a eu un débat pour savoir si ce serait une bonne fonctionnalité à ajouter. Je pense personnellement qu'ils devraient.
la source