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