Kotlin оператор возврата для назначения переменной - PullRequest
1 голос
/ 30 апреля 2020

Я хочу присвоить переменную в Kotlin с помощью когда:

val clickedBlock: Block? = when (event.action) {
    ...
    Action.RIGHT_CLICK_AIR -> {
        p.getLineOfSight(null, 5).forEach { block ->
            if (block.type != Material.VOID_AIR) {
                block // I want to assign the variable with this
            }
        }
        null // and not always with this
    }
    else -> null
}

Но IntelliJ говорит, что всегда будет возвращать второе нулевое значение.

Как я могу добиться, чтобы переменной clickedBlock будет присвоен блок (и не нуль), если оператор if внутри forEach l oop имеет значение true без необходимости вводить другую переменную ?

1 Ответ

4 голосов
/ 30 апреля 2020

Вы можете обернуть это в run function

Action.RIGHT_CLICK_AIR -> run {
    p.getLineOfSight(null, 5).forEach { block ->
        if (block.type != Material.VOID_AIR) {
            return@run block // I want to assign the variable with this
        }
    }
    null
}

, но я думаю, что было бы лучше сделать это:

Action.RIGHT_CLICK_AIR -> p.getLineOfSight(null, 5).find { block -> block.type != Material.VOID_AIR }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...