在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")
}
答案 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") }