Função dada foo:
fun foo(m: String, bar: (m: String) -> Unit) {
bar(m)
}
Nós podemos fazer:
foo("a message", { println("this is a message: $it") } )
//or
foo("a message") { println("this is a message: $it") }
Agora, digamos que temos a seguinte função:
fun buz(m: String) {
println("another message: $m")
}
Existe uma maneira de eu passar "buz" como parâmetro para "foo"? Algo como:
foo("a message", buz)
fun something() { foo("hi", { buz(it) }) }
this::function
bar: ((m: String) -> Unit)?
m
é para foo, o outro parâmetro é o nome do parâmetro do tipo de função passado na barra de variáveis para a função.Sobre a função de membro como parâmetro:
código:
fonte
Kotlin 1.1
use
::
para referenciar o método.gostar
fonte
Basta usar "::" antes do nome do método
foo(::bar)
Saída :Hello World
fonte
aparentemente isso ainda não é suportado.
mais informações:
http://devnet.jetbrains.com/message/5485180#5485180
http://youtrack.jetbrains.com/issue/KT-1183
fonte
Se você deseja passar os métodos setter e getter .
Uso:
fonte
A resposta de Jason Minard é boa. Isso também pode ser alcançado usando a
lambda
.Qual pode ser chamado com
foo("a message", buz)
.Você também pode tornar isso um pouco mais SECO usando a
typealias
.fonte
Outro exemplo:
fonte
Atualmente, as funções de primeira classe não são suportadas no Kotlin. Houve um debate sobre se esse seria um bom recurso a ser adicionado. Eu pessoalmente acho que eles deveriam.
fonte