Выполнение и возврат из блока кода (после оператора Элвиса) - PullRequest
0 голосов
/ 02 декабря 2018

Я действительно не уверен, как назвать название, поэтому я собираюсь объяснить его как можно лучше:

val a = b ?: ({
    val temp = c.evaluate()
    store(temp)
    temp // returns temp to the lambda, which will set `a` to `temp` if `b` is null 
})()

1 : что работает,то, что я сейчас использую

Это прекрасно работает, но в идеале я хочу просто использовать блок кода и не передавать лямбда-функцию в функцию (({})), а затем оценивать ее.В моем воображении это выглядело бы примерно так:

val a = b ?: {
    val temp = c.evaluate()
    store(temp)
    temp // returns temp to the lambda, which will set `a` to `temp` if `b` is null 
}

2 : что бы я хотел иметь

Вышесказанное делает не работа.Я на самом деле просто ищу лучший способ написать 1 .

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

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

val a = b ?: c.evaluate().also { store(it) }

Это позволяет вам что-то делать со значением, передавая это значение как результат also

0 голосов
/ 02 декабря 2018

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

val a = b ?: run {
    val temp = c.evaluate()
    store(temp)
    temp
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...