#function #class #kotlin
#функция #класс #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
Комментарии:
1.
Chemical(q):: data class
недопустимый синтаксис2. Чтение документов всегда является хорошей практикой, прежде чем задавать вопросы.
Ответ №1:
Ваш синтаксис неправильный, и поскольку Chemical
это класс данных, вам даже не нужно создавать строку самостоятельно, она уже будет создана для вас:
fun printans(c: Chemical) {
println(it)
}
Химический (ключ =foo, имя=bar, формула=baz)
Итак, вы могли бы даже упростить до println(c)
и не использовать выделенную функцию, поскольку она не делает ничего большего, чем println
могла бы сделать.
Если этот формат вам не подходит, я бы рекомендовал переопределить toString
of Chemical
.
data class Chemical(/* ... */) {
fun toString(c: Chemical) = "Key = ${c.key}, Name = ${c.name} Formula = ${c.formula}"
}
Таким образом, независимо от того, куда вы их передаете println
, выходные данные всегда будут в желаемом формате, потому что println
вызовы toString
находятся под капотом.
Комментарии:
1. Большое спасибо за ваш быстрый и полезный ответ! Я думал, что перепробовал все возможные комбинации синтаксиса, но пропустил эту. Еще раз спасибо!
Ответ №2:
Добавьте фигурные скобки и используйте q: Chemical
вместо Chemical(q):: data class
.
fun printans(q: Chemical) {
println("Key = ${q.key}, Name = ${q.name} Formula = ${q.formula}")
}
Комментарии:
1. И исправление объявления функции на
fun printans(q: Chemical) {
.
Ответ №3:
Вы можете использовать расширенную функцию Kotlin! Вот так:
fun Chemical.printans(){
println("Key = ${this.key}, Name = ${this.name} Formula = ${this.formula}")
}
И просто вызвать его:
val chemical = Chemical("Key", "Name", "Formula")
chemical.printans()
Вы можете прочитать больше о расширенных функциях здесь
Комментарии:
1.
printans
иprinntln
кажутся несоответствующими.