在函数中返回单元的目的是什么?
从Kotlin文档:
如果一个函数没有返回任何有用的值,它的返回类型是Unit。 单位是只有一个值的类型 – 单位。价值。 这个值不必显式返回:
fun printHello(name : String?) : Unit { if (name != null) print("Hello, $name!") else print("Hi there!") // We don't need to write 'return Unit.VALUE' or 'return', although we could }
在函数中返回单元的目的是什么? 为什么VALUE在那里? 这是什么VALUE?
目的与C或Java的void
。 只有单位是一个适当的类型,所以它可以作为一个通用的参数传递等。
-
为什么我们不把它称为“虚无”:因为“无效”这个词的意思是“无”,还有另一种类型,
Nothing
,这意味着只是“没有价值”,即计算没有正常完成(永远循环或抛出一个例外)。 我们承受不了意义的冲突。 -
为什么Unit有一个值(即与Nothing不相同):因为通用代码可以顺利工作。 如果传递一个通用参数T的Unit,则为任何T写的代码将会期望一个对象,并且必须有一个对象,即Unit的唯一值。
-
如何访问单元的值:因为它是一个单例对象,所以说
Unit
单位存在的主要原因是因为通用原因。 我们使用Kotlin文档中的示例。
class Box<T>(t: T) { var value = t }
我们可以有
var box = Box(Unit)
这就是为什么Unit会返回一个值,所以Kotlin可以从传入类初始化的类型中推断出它。 当然,你也可以这样写,
var box = Box<Unit>(Unit)
但都一样,它必须有一个返回值。 现在,Kotlin中Java的void关键字是Nothing 。 没有什么是Kotlin类型层次结构中的最后一个类型,最后一个是Nothing? (无空)。 这根本不会返回任何值。 因为它根本没有返回任何值,所以我们不能把它作为上面代码中的一个类型来传递。
var box = Box(Nothing) //This will return an Error