来自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
}
Run Code Online (Sandbox Code Playgroud)
单位返回功能的目的是什么?为什么有VALUE?什么是VALUE?
And*_*lav 110
目的与C或Java相同void.只有Unit是一个合适的类型,所以它可以作为泛型参数等传递.
为什么我们不称它为"Void":因为"void"这个词的意思是"没有",而且还有另一种类型Nothing,这意味着"根本没有价值",即计算没有正常完成(永久循环或扔掉)一个例外).我们无法承受意义冲突.
为什么Unit有一个值(即与Nothing不同):因为通用代码可以顺利运行.如果为通用参数T传递Unit,则为任何T编写的代码将需要一个对象,并且必须有一个对象,即Unit的唯一值.
如何访问Unit的值:因为它是一个单例对象,就这么说 Unit
Alf*_*Moh 12
Unit存在的主要原因是由于通用原因.让我们使用Kotlin文档中的示例.
class Box<T>(t: T) {
var value = t
}
Run Code Online (Sandbox Code Playgroud)
我们可以有
var box = Box(Unit)
Run Code Online (Sandbox Code Playgroud)
这就是为什么Unit返回一个值,以便Kotlin可以从传递给类初始化的类型推断它.当然,您也可以这样明确地写出来,
var box = Box<Unit>(Unit)
Run Code Online (Sandbox Code Playgroud)
但同样,它必须有一个返回值.现在,Kotlin中Java中的void关键字是Nothing.在Kotlin的类型层次结构中,没有什么是最后一种类型,最后一种类型是什么?(Nullable Nothing).这根本不会返回任何值.因为它根本不返回任何值,所以我们不能将它作为上述代码中的类型传递.
var box = Box(Nothing) //This will return an Error
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11576 次 |
| 最近记录: |