Kotlin вызывает предоставленный аргумент типа Unit - PullRequest
0 голосов
/ 14 сентября 2018

Я сейчас немного борюсь с Котлиным.

На Java я бы сделал следующее:

public void doSomething(Consumer<String> onResult) {
    ...
    onResult.accept("Hello");
}

Теперь, исходя из того, что я слышу, в Котлине я говорю об этом так:

fun doSomething(onResult: (message: String) -> Unit) {
    ...
}

Как передать значение onResult сейчас?

fun doSomething(onResult: (message: String) -> Unit) {
    onResult.apply { "Hello" }
}

Или как это сделать?

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

Аргумент onResult ведет себя как нормальная функция.Вы можете просто позвонить по номеру onResult("Hello").

0 голосов
/ 14 сентября 2018

Вы можете использовать метод invoke для вызова функции параметра или просто вызвать функцию:

fun main(args: Array<String>) {
    doSomething{ s -> println(s)}
    doSomething{ s -> println("You entered $s")}
}

fun doSomething(onResult: (message: String) -> Unit) {
    onResult("bla") // Invoke the passed function with a specific string
    // Note that onResult.invoke("bla") also does the same thing.
}

Это напечатает:

bla
You entered bla
0 голосов
/ 14 сентября 2018

Используйте обычный вызов метода.В методе doSomething ваш параметр является функцией.Таким образом, вы можете передать значение входящей функции с помощью onResult("Hello");

fun mainMethod(m: String, functionAsParam: (m: String) -> Unit) {
    functionAsParam(m)
}

// my function to pass into the other
fun functionAsParam(m: String) {
    println("my message: $m")
}

Просто идея;

//Also you can call like this method 
fun tryMySolution() {
    mainMethod("hi", ::functionAsParam)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...