Dada la función foo:
fun foo(m: String, bar: (m: String) -> Unit) {
bar(m)
}
Podemos hacer:
foo("a message", { println("this is a message: $it") } )
//or
foo("a message") { println("this is a message: $it") }
Ahora, digamos que tenemos la siguiente función:
fun buz(m: String) {
println("another message: $m")
}
¿Hay alguna manera de pasar "buz" como parámetro a "foo"? Algo como:
foo("a message", buz)
fun something() { foo("hi", { buz(it) }) }
this::function
bar: ((m: String) -> Unit)?
m
es para foo, el otro parámetro es el nombre del parámetro del tipo de función pasado en la barra variable a la función.Sobre la función miembro como parámetro:
código:
fuente
Kotlin 1.1
utilizar
::
como método de referencia.me gusta
fuente
Simplemente use "::" antes del nombre del método
foo(::bar)
Salida :Hello World
fuente
aparentemente esto aún no es compatible.
más información:
http://devnet.jetbrains.com/message/5485180#5485180
http://youtrack.jetbrains.com/issue/KT-1183
fuente
Si desea pasar los métodos setter y getter .
Uso:
fuente
La respuesta de Jason Minard es buena. Esto también podría lograrse usando a
lambda
.Que se puede llamar con
foo("a message", buz)
.También puedes hacer esto un poco más SECO usando a
typealias
.fuente
Otro ejemplo:
fuente
Las funciones de primera clase actualmente no son compatibles con Kotlin. Se ha debatido si esta sería una buena característica para agregar. Personalmente creo que deberían hacerlo.
fuente