Kotlin函数声明返回String却输出kotlin.Unit,原因是什么?
问题解析:为什么返回String的函数输出了kotlin.Unit?
你的代码核心问题出在对println()函数的理解上:
println()是无返回值的函数,Kotlin中这类函数默认返回Unit(对应Java的void),它仅负责把内容打印到控制台,不会返回你打印的字符串。- 你把
println("Happy Birthday, Rover!")的执行结果赋值给nameGreeting,这个变量实际存的不是祝福语字符串,而是println执行后的返回值Unit;同理ageGreeting也是Unit类型。
当birthdayGreeting()函数返回"$nameGreeting\n$ageGreeting"时,本质是把两个Unit对象转换成字符串拼接,而Unit的字符串表示就是kotlin.Unit。同时,你在赋值变量时已经执行了println,所以先输出了两行祝福语;之后main函数里又调用println(greeting),就把拼接后的kotlin.Unit\nkotlin.Unit也打印出来,这就是你看到额外两行输出的原因。
修正方案
方案1:函数生成字符串,由main函数打印
fun main() { val greeting = birthdayGreeting() println(greeting) } fun birthdayGreeting(): String { val nameGreeting = "Happy Birthday, Rover!" val ageGreeting = "You are now 5 years old!" return "$nameGreeting\n$ageGreeting" }
方案2:函数内部直接打印,无需返回字符串
fun main() { birthdayGreeting() } fun birthdayGreeting() { // 省略返回类型默认是Unit println("Happy Birthday, Rover!") println("You are now 5 years old!") }
两种方案都能得到你预期的输出:
Happy Birthday, Rover!
You are now 5 years old!
内容的提问来源于stack exchange,提问作者Devansh Vishwa
相关产品推荐
相关产品推荐

