如何将数据类中的数据传递给函数

时间:2019-04-07 08:11:59

标签: function class kotlin

我需要使用一个函数来打印数据类中的数据,并已在该站点上阅读了一些其他答案,但我仍不清楚如何执行此操作。帮助将不胜感激!

data class Chemical(
    val key: String,
    val name : String,
    val formula : String
)

fun printans(Chemical(q):: data class) {

    println("Key = $q.key,  Name = $q.name Formula = $q.formula")

}

fun main(args: Array<String>) {

    val cuso4 = Chemical("001", "Copper(II) sulphate", "CuSO4")
    val cacl2 = Chemical("002", "Calcium chloride", "CaCl2")

    printans(cuso4)
    printans(cacl2)
}

我报告了许多错误,例如:

test.kt:9:22: error: expecting comma or ')'
fun printans(Chemical(q):: data class) {

test.kt:11:2: error: expecting member declaration
    println("Key = $q.key,  Name = $q.name Formula = $q.formula")

etc

3 个答案:

答案 0 :(得分:1)

您的语法是错误的,并且由于Chemical是一个数据类,因此您甚至不需要自己构建字符串,它已经为您构建了:

fun printans(c: Chemical) {
    println(it)
}
  

Chemical(key = foo,name = bar,Formula = baz)

因此,您甚至可以简化为println(c),而不必使用专用功能,因为它所执行的功能不及println

如果这种格式不是您想要的格式,我建议覆盖toString中的Chemical

data class Chemical(/* ... */) {
    fun toString(c: Chemical) = "Key = ${c.key},  Name = ${c.name} Formula = ${c.formula}"
}

这样,无论您将其传递到println的哪个位置,输出都将始终采用所需的格式,因为println在后​​台调用了toString

答案 1 :(得分:0)

添加括号并使用q: Chemical代替Chemical(q):: data class

fun printans(q: Chemical) {
    println("Key = ${q.key},  Name = ${q.name} Formula = ${q.formula}")
}

答案 2 :(得分:0)

您可以使用Kotlin扩展功能! 像这样:

fun Chemical.printans(){
println("Key = ${this.key},  Name = ${this.name} Formula = ${this.formula}")
}

然后调用它:

val chemical = Chemical("Key", "Name", "Formula")
chemical.printans()

您可以阅读有关扩展功能here

的更多信息