显然,这被类型检查器拒绝了:
val a: Unit = 42 // Fail
但是,这很好:
val b: Unit = { 42 }() // Pass
我能理解:
val f: ()->Any = { -> 42 } // Pass
自 Int <: Any
.但是,Unit
必须不同。 (它不是 Int
的父类(super class)型)。是否有一些文档解释发生了什么?
最佳答案
官方文档在 lambda expression syntax 下对此进行了介绍:
If the inferred return type of the lambda is not Unit, the last (or possibly single) expression inside the lambda body is treated as the return value.
所以基本上,如果您将 lambda 显式分配给返回 Unit
的函数类型,或者您调用它并将其结果分配给 Unit
,它会推断您没有' 不希望返回 lambda 中的最后一个表达式(默认情况下会发生这种情况)。
关于kotlin - 任何可提升到 `Unit` 的 λ 密码域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48519699/