В Kotlin как мне создать список лямбд, где каждая лямбда имеет тип (Int) -> List? Я получаю ошибки объявления о деструктуризации - PullRequest
2 голосов
/ 03 апреля 2020

Я пытаюсь создать список лямбд в Kotlin, но получаю следующую ошибку во время компиляции:

 Destructuring declaration initializer of type Int must have a 'component1()' function

Вот мой код:

val pathXRanges = listOf<(Int) -> List<Int>>(
                {(extX) -> ((extX - (board.k - 1))..(extX + board.k - 1)).toList()}, // diagonal 1 (y = -x)
                {(extX) -> ((extX - (board.k - 1))..(extX + board.k - 1)).toList()}, // diagonal 2 (y = x)
                {(extX) -> List(board.k * 2 - 2) { extX } }, // x = x
                {(extX) -> ((extX - (board.k - 1))..(extX + board.k - 1)).toList()} // y = y
        )

Вот и все! Любая помощь приветствуется, дайте мне знать, если вам нужно что-то разъяснить.

Спасибо!

1 Ответ

5 голосов
/ 03 апреля 2020

Просто удалите скобки из значений extX лямбда-параметров, т.е.:

    val pathXRanges = listOf<(Int) -> List<Int>>(
      { extX -> ((extX - (board.k - 1))..(extX + board.k - 1)).toList() }, // diagonal 1 (y = -x)
      { extX -> ((extX - (board.k - 1))..(extX + board.k - 1)).toList() }, // diagonal 2 (y = x)
      { extX -> List(board.k * 2 - 2) { extX } }, // x = x
      { extX -> ((extX - (board.k - 1))..(extX + board.k - 1)).toList() } // y = y
    )

Скобки указывают компилятору, что лямбда-параметр должен быть неструктурированным , а параметр component1() оператор функции должен быть вызван для присвоения значения extX.

Конечно, Int не имеет функции component1(), следовательно, ошибка:

Destructuring declaration initializer of type Int must have a 'component1()' function`.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...