Как я могу ввести более пяти значений в одну строку? - PullRequest
1 голос
/ 16 октября 2019

Мне нужно ввести девять значений в одной строке в Kotlin:

fun readInts() = readLine()!!.split(' ').map { it.toInt() }

fun main(){
    val (x, y, z, f, e, m, s, t, c) = readInts() 

, но когда я пытаюсь это сделать, я получаю сообщение об ошибке:

Error:(5, 30) Kotlin: Destructuring declaration initializer of type List<Int> must have a 'component6()' function

Заранее спасибо заваша помощь)

1 Ответ

3 голосов
/ 16 октября 2019

Kotlin определяет только от component1() до component5() на List, которые он использует для деструктурирования, поэтому ограничивает то, что вы можете с ним сделать.

Однако, благодаря Функции расширения , мы можем определить наши собственные:

operator fun <T> List<T>.component6(): T = this[5]
operator fun <T> List<T>.component7(): T = this[6]
operator fun <T> List<T>.component8(): T = this[7]
operator fun <T> List<T>.component9(): T = this[8]

(и так далее ...)

И тогда это должно работать:

val (x, y, z, f, e, m, s, t, c) = readInts() 

Обратите внимание, что этовероятно, произойдет сбой, как написано, если ваши компоненты нулевые.

...