Как передать данные в классе данных в функцию - PullRequest
0 голосов
/ 07 апреля 2019

Мне нужно использовать функцию для печати данных из класса данных и после прочтения некоторых других ответов на этом сайте, но я до сих пор не знаю, как это сделать. Помощь будет оценена!

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 ]

1 голос
/ 07 апреля 2019

Ваш синтаксис неправильный, и поскольку Chemical является классом данных, вам даже не нужно создавать строку самостоятельно, она уже будет создана для вас:

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

Химический (ключ = foo, имя = бар, формула = баз)

Таким образом, вы можете даже упростить до println(c) и не использовать выделенную функцию, поскольку она не выполняет ничего, что могло бы сделать println.

Если этот формат не тот, который вам нужен, я бы рекомендовал переопределить toString из Chemical.

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

Таким образом, независимо от того, куда вы передадите его в println, вывод всегда будет в желаемом формате, потому что println вызывает toString под капотом.

0 голосов
/ 07 апреля 2019

Вы можете использовать расширенную функцию Kotlin!Вот так:

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

И просто вызовите его:

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

Подробнее о расширенных функциях можно прочитать здесь

0 голосов
/ 07 апреля 2019

Добавьте фигурные скобки и используйте q: Chemical вместо Chemical(q):: data class.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...