kotlin - 将单位类型分配给变量

标签 kotlin

如果您将 Unit 类型分配给 Kotlin 中的变量会怎样?

让我们以这段小代码为例:

val list = listOf("Hey", "this", "code", "runs")
val unit = list.forEach {
    print(it.plus(" "))
}

输出:

Hey this code runs

为什么这段代码可以运行?此示例中 val unit 的值是多少?我的意思是,难道不应该有一个 unit.invoke() 函数来实际运行代码吗?

提前致谢!

最佳答案

在 Kotlin 中,Unit是一种只有一个值的类型:也称为 Unit 的对象。

它与Java中的void类型目的相同,但实现方式不同。 (这是因为 Kotlin 借鉴了函数式语言的思想,其中每个表达式都有一个值。因此,如果一个函数没有任何有用的返回值,它会返回 Unit。这将它与 的方法区分开来从不 返回,声明为 Nothing 类型,没有 值。)

您的代码完全有效; forEach() 执行并打印其输出,然后返回 Unit 值。 (forEach() 是您调用只是因为它的副作用而不是因为它的返回值的函数之一。这就是为什么您通常不会费心用返回值;但是你已经证明如果你真的想的话你可以!)

因此您的unit 被推断为Unit 类型,并将被分配Unit 值。

你可以在之后打印它来检查:

println(unit)

打印“kotlin.Unit”,这是对 Unit 值调用 toString() 的结果。

关于kotlin - 将单位类型分配给变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58852960/

相关文章:

android - 观察数据类属性变化的可变实时数据

android - 使用 Kotlin 数据类的 Json 解析器正确返回 json 数据,但是为什么解析器(MockK)的单元测试会失败?

android - 在 jetpack compose 中对齐行项目

android - 如何使用 Room Library Android 在 TextView 中显示数据?

spring - 如何在 Spek 测试中使用依赖注入(inject)

kotlin - 如何将注释 @IntRange 用于 Integer 的 Kotlin 扩展函数

kotlin - 为什么 CoroutineExceptionHandler 没有捕获/处理我的异常?

kotlin - 为什么 Swagger 不检测可选的 JSON 属性?

regex - Kotlin,无法匹配正则表达式模式

gradle - TornadoFX的编写单元测试