类似c的语言的切入点几乎相同,因此Kotlin的fun main() {}
但是,这对我来说是可以理解的;当将此例程用作单一表达式函数并且将其分配给任何输出方法时,它将被编译并打印print方法的参数值而不是其返回类型(即Unit
)。我想这个代码片段会很清楚。
fun main() = print("Do I return something?")
这将被编译为基本的hello world程序!
print()
方法返回什么?是Unit
以外的东西吗?Unit
?fun main() {
val x= println()
print(x)
}
然后,为什么在这种情况下它不返回Unit
:
fun main() = foo()
fun foo(): Unit {}
答案 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)
我希望能对您有所帮助:
fun main(): Unit
或fun main(args: Array<String>): Unit
,它们是返回Unit
的函数Unit
是Kotlin函数在没有有趣的返回值时默认返回的内容println()
返回Unit
Unit
返回类型,但这是隐含的fun foo(): T = boo()
是fun foo(): T { return boo() }
fun main(): Unit
和fun println(...): Unit
具有相同的返回类型Unit
,因此写入fun main() = println()
是有效的