Kotlin功能:所需单位?找到Int

时间:2017-12-01 09:34:29

标签: android kotlin higher-order-functions

在Kotlin中反复面对这个问题

fun test(){
        compute { foo -> Log.e("kotlin issue", "solved") } // This line is //showing error
    }

    fun compute(body: (foo:String) -> Unit?){
        body.invoke("problem solved")
    } 

我在Studio中收到错误。这是一个截图。 enter image description here

2 个答案:

答案 0 :(得分:6)

传递给compute函数的lambda必须返回Unit?。现在,您将返回Log.e()调用的结果,该调用返回表示写入输出的字节数的Int。如果你要做的只是在lambda中记录一条消息,你可以在它的末尾显式返回Unit,如下所示:

fun test() {
    compute { foo -> 
        Log.e("kotlin issue", "solved") 
        Unit
    }
}

另请参阅this question,其中讨论了将返回值转换为Unit的其他方法。

答案 1 :(得分:1)

Android Log.e返回Int,其中body参数指定返回类型应为Unit?

您需要更改compute方法签名,如下所示:

fun compute(body: (foo: String) -> Unit) { body.invoke("problem solved") }

或者像这样更改调用:

compute { foo -> Log.e("kotlin issue", "solved"); null }

或者包装计算以更改调用:

fun myCompute(body: (foo: String) -> Any?) { compute { body(it); null } }

然后按预期调用它:

myCompute { foo -> Log.e("kotlin issue", "solved") }