返回函数的单位的目的是什么

来自 Kotlin 的文献:

如果一个函数没有返回任何有用的值,那么它的返回类型是 Unit。Unit 是只有一个值的类型ー Unit.VALUE。此值不必显式返回:

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 是什么?

29017 次浏览

其用途与 C 或 Java 的 void相同。只有 Unit 是正确的类型,所以它可以作为泛型参数等传递。

  1. 为什么我们不叫它“ Void”: 因为单词“ Void”意味着“ nothing”,还有另一种类型 Nothing,意味着“根本没有值”,也就是说计算没有正常完成(永久循环或抛出异常)。我们承受不起意义的冲突。

  2. 为什么 Unit 有一个值(即不等于 Nothing) : 因为泛型代码可以顺利工作。如果为泛型参数 T 传递 Unit,则为任何 T 编写的代码都将期望一个对象,并且必须有一个对象,即 Unit 的唯一值。

  3. 如何访问 Unit 的值: 既然它是一个单例对象,就说 Unit

单位存在的主要原因是一般原因。 让我们使用 Kotlin 文档中的例子。

class Box<T>(t: T) {
var value = t
}

我们可以

var box = Box(Unit)

这就是为什么 Unit 返回一个值,这样 Kotlin 就可以从传入类初始化的类型中推断出它。当然你也可以这样明确地写,

var box = Box<Unit>(Unit)

但是同样的,它必须有一个返回值。 现在,Kotlin Java 中的 空白关键字是 没什么。在 Kotlin 的类型层次结构中,没什么是最后一个但只有一个类型,最后一个类型是 没什么(Nullable Nothing)。这根本不返回任何值。因为它根本不返回任何值,所以我们不能在上面的代码中将其作为类型传递。

var box = Box(Nothing) //This will return an Error

UNIT实际上包含有价值的信息,它基本上只是意味着“完成”。它只是向调用者提供 报税表信息,说明该方法已经完成。这是一条真实的信息,因此可以将其视为方法的 返回值