任何人都知道为什么以下代码不起作用?
private fun wrapLogIfNeeded(buildMessageOnCurrentThread: Boolean, log: () -> String): () -> String
return if(buildMessageOnCurrentThread) {
val message = log() // Type mismatch: Required () -> String Found: Unit
{ message }
}
else {
log
}
}
Run Code Online (Sandbox Code Playgroud)
但这样做:
private fun wrapLogIfNeeded(buildMessageOnCurrentThread: Boolean, log: () -> String): () -> String
return if(buildMessageOnCurrentThread) {
val message = lazy { log() }.value
{ message }
}
else {
log
}
}
Run Code Online (Sandbox Code Playgroud)
这是因为语法含糊不清:
val message = log()
{ message }
Run Code Online (Sandbox Code Playgroud)
这个代码被解析,好像它是val message = log() { message },就是log用lambda { message }作为参数调用.并且语句val message = ...具有类型Unit,因此出现错误消息.
要解决它,您可以添加分号:
val message = log();
{ message }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |