从代码块执行并返回(在Elvis运算符之后)

时间:2018-12-02 15:42:38

标签: kotlin

我真的不确定如何命名标题,因此我将尽最大可能解释它:

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 :什么有效,我目前使用什么

这很好用,但是我理想地要做的只是使用代码块,而不是将lambda传递给函数(({})),然后对其进行评估。在我的想象中,它看起来像这样:

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 :(得分:4)

您可以使用run函数:

val a = b ?: run {
    val temp = c.evaluate()
    store(temp)
    temp
}

答案 1 :(得分:3)

您可以使用also函数:

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

这允许您在通过also

的结果传递值的同时对值进行处理