在 Kotlin 中,几乎一切都是表达式并且都有值

liv*_*iur 1 return-value kotlin output

我开始研究 Kotlin 编程语言,但我有些不清楚,我需要一些帮助来澄清它。

从理论上讲,我很清楚,在 Kotlin 中几乎所有东西都有价值。从实际层面来看,事实并非如此,我发现了这个案例。

有了这个代码:

val isUnit = println("This is an expression")
println(isUnit)
Run Code Online (Sandbox Code Playgroud)

我的输出是

This is an expression
kotlin.Unit
Run Code Online (Sandbox Code Playgroud)

所以首先它打印他的类型的值isUnit,然后打印他的类型。

但如果我这样做

val isUnit = 10
println(isUnit)
Run Code Online (Sandbox Code Playgroud)

输出将是

10
Run Code Online (Sandbox Code Playgroud)

为什么在这种情况下输出不是

10
kotlin.Int
Run Code Online (Sandbox Code Playgroud)

Ani*_*ahu 5

定义Unit.toString为:

public object Unit {
    override fun toString() = "kotlin.Unit"
}
Run Code Online (Sandbox Code Playgroud)

String.valueOf(i)而println最后还是改为Int类型。它返回 Int 值的 String 表示形式。

您可以使用KClass.qualifiedName打印类的名称:

val isUnit = 10
println(isUnit)
println(isUnit::class.qualifiedName)
Run Code Online (Sandbox Code Playgroud)

印刷:

10
kotlin.Int
Run Code Online (Sandbox Code Playgroud)