为什么Kotlin中的主例程被接受为单一表达式?

时间:2019-03-25 12:37:26

标签: function methods kotlin

类似c的语言的切入点几乎相同,因此Kotlin的fun main() {}

但是,这对我来说是可以理解的;当将此例程用作单一表达式函数并且将其分配给任何输出方法时,它将被编译并打印print方法的参数值而不是其返回类型(即Unit)。我想这个代码片段会很清楚。

fun main() = print("Do I return something?")

这将被编译为基本的hello world程序!

  • 为什么会对此进行编译? main方法返回的不是0吗?
  • 是否等于运算符充当赋值运算符?如果是这样; print()方法返回什么?是Unit以外的东西吗?
  • 如果是这样,为什么在将其分配给变量时返回Unit
fun main() {
    val x= println()
    print(x)
}

然后,为什么在这种情况下它不返回Unit

fun main() = foo()
fun foo(): Unit {}

2 个答案:

答案 0 :(得分:4)

我不明白您的要求。 =不是赋值运算符。这只是编写方法的一种较短方法:

 fun main() = print("Do I return something?")

等同于

fun main(): Unit {
    return print("Do I return something?")
}

并且由于print()的返回类型为Unit,因此它等效于

fun main() {
    print("Do I return something?")
}

有关详细信息,请参见the documentation

在以下代码段中,= 是赋值运算符:

fun main() {
    val x = println()
    print(x)
}

因此,此代码调用println(),并将返回的内容(Unit)分配给变量x。因此,打印x会产生输出kotlin.Unit

答案 1 :(得分:1)

我希望能对您有所帮助:

  • Kotlin程序的入口点是fun main(): Unitfun main(args: Array<String>): Unit,它们是返回Unit的函数
  • Unit是Kotlin函数在没有有趣的返回值时默认返回的内容
  • println()返回Unit
  • 在代码中通常会省略Unit返回类型,但这是隐含的
  • fun foo(): T = boo()fun foo(): T { return boo() }
  • 的简短语法
  • 由于fun main(): Unitfun println(...): Unit具有相同的返回类型Unit,因此写入fun main() = println()是有效的