kotlin - 任何可提升到 `Unit` 的 λ 密码域?

标签 kotlin subtyping

显然,这被类型检查器拒绝了:

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/

相关文章:

android - 如何每秒运行一个 Runnable 来更新 UI

java - 从 Java(和 Kotlin)隐藏 Kotlin 对象的实例字段

javascript - 流类型,转换为数组类型不适用于显式类型,但适用于隐式类型

Scala 泛型子类型参数

list - 通过灵活类型的异构列表

scala - 是否可以使用类型类来实现特征?

postgresql - JOOQ 和字段值 : BigDecimal to Int

lambda - 为什么这个不可为 null 的 val 变成 "nullable"?

kotlin - 对一个对象列表所做的更改也会影响另一列表

java - 我们可以用 Java(或 Kotlin)表示 "self class"吗?