Kotlin 单元返回函数的目的是什么
从Kotlin文档中: 如果函数不返回任何有用的值,则其返回类型为Unit。Unit是只有一个值的类型-Unit.value。不必显式返回此值:Kotlin 单元返回函数的目的是什么,kotlin,Kotlin,从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
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
}
单元返回函数的目的是什么?为什么有价值?这个值是多少?目的与C或Java的
void
相同。只有Unit是正确的类型,所以它可以作为泛型参数等进行传递
nothing
,意思是“根本没有值”,即计算没有正常完成(永远循环或抛出异常)。我们承受不起意义上的冲突Unit
单位存在的主要原因是因为一般原因。 让我们使用Kotlin文档中的示例
class Box<T>(t: T) {
var value = t
}
这就是为什么单元返回一个值,以便Kotlin可以从传递到类初始化中的类型推断出该值。当然,你也可以这样写
var box = Box<Unit>(Unit)
UNIT
实际上包含有价值的信息,它基本上就是“完成”的意思。它只是将方法已完成的信息返回给调用方。这是一条真实的信息,因此可以将其视为方法的返回值。谢谢!我明白为什么它现在不是空的或者什么都没有。但选择“单位”对我来说有点误导。虽然我不是以英语为母语的人,“Unit”只是代表“只有一个值的东西”,它是一个传统的名称,来自函数式语言。我同意这个名字不是很直观,但我们没能发明一个更好的名字。@AndreyBreslav,在我听来,Unit
这个词不可能存在于它的表面,意思是“什么的单位?”@AndreyBreslav,是的,这引出了:“它代表一个实体,一个计数或测量的单位。”。那么实体是什么?@AlikElzin kilaka实际上,在函数世界中,将一种0元元组称为“单位”是一种传统,因为它只有一个值。我认为这是一个正确的名字,因为根据维基百科的文章,数字“一”也可以被称为“单位”或“统一”。你可以把它看作是一个单位类型,而不是某事物的一个单位,也就是说,一个在类型代数中具有1的代数性质的类型。查找“总和类型”和“产品类型”了解更多详细信息我不是类别理论专家,但我知道名称void
和unit
来自类别理论void
是一个没有成员的类别,unit
是一个有一个成员的类别,bool
是一个有两个成员的类别(true和false)void
继承自C语言,这是通用代码的一大难题。通常在爪哇、C和C++中,需要处理<代码> Value>代码>案例,因为它是一个奇怪的类型(它没有任何值)。code>unit有着微妙的优越性,因为它只有一个值,这意味着在特殊情况下不需要这样做。此外,在FP中,所有函数都有一个参数,因此需要一个不在乎的值。Unit
由于一般原因而存在,代码可以顺利运行。并且它还将信息返回给调用者,即方法已经完成。
var box = Box<Unit>(Unit)
var box = Box(Nothing) //This will return an Error