函数中单元返回的目的是什么

时间:2014-03-26 08:12:07

标签: 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 'return', although we could 
}

单位返回功能的目的是什么?为什么有VALUE?这是什么价值?

3 个答案:

答案 0 :(得分:105)

目的与C或Java的void相同。只有Unit是一个合适的类型,所以它可以作为通用参数等传递。

  1. 为什么我们不称它为“Void”:因为“void”这个词的意思是“什么都没有”,还有另一种类型Nothing,这意味着“根本没有价值”,即计算没有正常完成(永久循环或抛出异常)。我们无法承受意义冲突。

  2. 为什么Unit有一个值(即与Nothing不同):因为通用代码可以顺利运行。如果为通用参数T传递Unit,那么为任何T编写的代码都需要一个对象,并且必须有一个对象,即Unit的唯一值。

  3. 如何访问Unit的值:因为它是一个单例对象,只需说Unit

答案 1 :(得分:12)

单位存在的主要原因是由于通用原因。 让我们使用Kotlin文档中的示例。

var line = "ticketNumber:45287,Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer "

var searchStr = [{
    "text": "45287"
}, {
    "text": "standard"
}]

var results = [];

function matchSearchStr(line, searchStrArray) {
    for (var i = 0; i < searchStrArray.length; i++) {
        if (line.toLowerCase().indexOf(searchStrArray[i].toLowerCase()) != -1) {
            results.push({
                filename: "file",
                value: line
            });
           console.log(results);
        }

    }

}

matchSearchStr(line, searchStr)

我们可以

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

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

var box = Box(Unit)

但是都一样,它必须有一个返回值。 现在,Kotlin中Java中的 void 关键字 Nothing Nothing 是Kotlin中类型层次结构中的最后一种类型,最后一种类型是 Nothing? (可以为空没有)。这根本不会返回任何值。因为它根本不返回任何值,所以我们不能将它作为上述代码中的类型传递。

var box = Box<Unit>(Unit)

答案 2 :(得分:2)

UNIT实际上包含有价值的信息,它基本上只是表示“完成”。只是将信息返回给调用者,表明该方法已完成。这是一条真实的信息,因此可以将其视为方法的返回值