Как я могу напечатать сообщение, используя лямбду в Kotlin - PullRequest
0 голосов
/ 27 января 2020

Я хочу напечатать a() сообщение с использованием лямбды, но я не могу этого сделать. Ничего не печатается в консоли. Как я могу это сделать?

var quackBehavior: QuackBehavior? = null

fun a(){
    quackBehavior?.let{
        it("I want print this message")
    }
}

fun printMessage(){
    quackBehavior = {
        println(it)
    }
}

fun main() {
    a()
}

typealias QuackBehavior = (String) -> Unit
``

Ответы [ 2 ]

2 голосов
/ 27 января 2020
quackBehavior?.let {
    it("I want print this message")
}

Лямбда, которую вы передали let, будет вызываться, только если quackBehaviour != null. Это так, потому что вы используете оператор безопасного вызова ?., который будет вызывать функции только для ненулевого получателя.

Поскольку вы не вызываете printMessage, где вы инициализируете quackBehaviour, он остается null.

Итак, чтобы исправить это, вызовите ваши функции следующим образом:

fun main() {
    printMessage() 
    a()
}

Необязательно:

Вы можете упростить свой код, например, так: :

fun main() {
    var quackBehavior: (String) -> Unit = {
        println(it)
    }

    quackBehavior("I want print this message")
}
2 голосов
/ 27 января 2020

В вашем коде вы не вызываете функцию printMessage, поэтому quackBehavior остается нулевым. Если вы добавите printMessage() вызов в main функцию до a() вызова, она будет работать как задумано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...