如果在Kotlin中为变量分配Unit
类型会怎样?
让我们以这小段代码为例:
val list = listOf("Hey", "this", "code", "runs")
val unit = list.forEach {
print(it.plus(" "))
}
输出:
嘿,这段代码可以运行
为什么此代码运行?在此示例中,val unit
的值是什么?我的意思是,应该没有一个unit.invoke()
函数实际运行代码吗?
提前谢谢!
答案 0 :(得分:4)
在Kotlin中,Unit是一种只有一个值的类型:对象Unit
。
它与Java中的void
类型具有相同的用途,但实现方式不同。 (这是因为Kotlin从功能性语言中借用了想法,在功能性语言中每个表达式都有一个值。因此,如果一个函数没有有用的返回值,它将返回Unit
。这将它与从不 return,以Nothing
类型声明,该类型具有 no 值。)
您的代码完全有效; forEach()
执行并打印其输出,然后返回Unit
的值。 (forEach()
是您仅因其副作用而不是其返回值而调用 的那些函数之一。这就是为什么您通常不会为返回值做任何事情的原因;但是您已经表明可以,如果您真的愿意!)
因此,您的unit
被推断为类型Unit
,并且将被分配Unit
值。
您可以通过在以后进行打印来检查它:
println(unit)
将显示kotlin.Unit
,这是对toString()
值调用Unit
的结果。
答案 1 :(得分:3)
为什么此代码运行?
它为Kotlin语言提供了语义和句法意义。变量的两个初始化都是它们前面的函数的返回值。
-
在此示例中,val单位的值是什么?
单位为Unit
-like void
in Java-因为foreach返回Unit
val unit : Unit = list.forEach {
print(it.plus(" "))
}
-
应该没有unit.invoke()函数实际运行代码吗?
变量{em> unit 通过执行forEach
进行初始化。为了获得结果,它调用循环,该循环执行print(it.plus(" "))
。
如果在Kotlin中将单元类型分配给变量会怎样?
什么都没有。无需保存/存储它。