Kotlin:编程是打印 kotlin.unit

Kotlin: Programing is printing kotlin.unit

提问人:Jerry Applegarth 提问时间:2/25/2021 更新时间:3/20/2021 访问量:1242

问:

我的 Kotlin 类将运行,但它打印出单词:kotlin。单位。我需要更改什么?

fun main(args: Array<String>) {
    var myDuck = Duck()
    println(myDuck.quack())
}
class Duck() {
    fun quack () {
        println("Quack, Quack, Quack")
    }
}
科特林

评论

2赞 Sergey Afinogenov 2/25/2021
只需调用 myDuck.quack() 而不是 println(myDuck.quack())

答:

4赞 joshmeranda 2/25/2021 #1

之所以打印,是因为您打印的是不返回任何值的函数的返回类型。如果您熟悉其他语言,则与返回类型相同。void

在 kotlin 中,没有返回类型的函数返回单位类型,因此当您打印 的返回值时,您正在打印值的字符串值。Duck::quackUnit

最简单的解决方案是不打印 的返回值 ;但是,如果要打印 的返回值,则需要返回一个有用的值。对于检查:Duck::quackprinltDuck::quak

class Duck() {
    fun quack(): String {
        return "Quack, Quack, Quack"
    }
}

fun main(args: Array<String>) {
    var myDuck = Duck()

    println(myDuck.quack())
}

或者更惯用地说:

class Duck() {
    val quack: String = "Quack, Quack. Quack"
}

fun main(args: Array<String>) {
    var myDuck = Duck()

    println(myDuck.quack)
}
0赞 Sergey Afinogenov 2/25/2021 #2

它应该打电话

    myDuck.quack() 

wich 已经在里面打印了。调用 println(myDuck.quack()) 会打印 myDuck.quack 的类型,因为它不返回任何值。

0赞 hasan muşluoğlu 3/20/2021 #3

1.打印“Kotlin.单位“(如果未指定类型)

fun main(args: Array<String>) {
    var myDuck = Duck()
    println(myDuck.quack())
}
class Duck():String {
    fun quack () {
        return "Quack, Quack, Quack"
    }
}

评论

0赞 Henry Twist 3/20/2021
我想你的意思是指定 ?存在在这里没有多大意义......quack()DuckString
0赞 Youn Tivoli 3/20/2021 #4

此外,很快:

fun main() {        
        println(Duck.quack())
    }

class Duck() {
    fun quack () = "Quack, Quack, Quack"
    }