Kotlin - делает его изменчивым в foreach - PullRequest
0 голосов
/ 29 октября 2019

Итак, я узнал, что it в моем цикле foreach является неизменным, а именно я получаю ошибку val cannot be reassigned.

results.forEach{
            val subGenreNames = subGenreNames(it.subGenres)
            it.subGenres = subGenreNames
}

Однако я хочу иметь возможность обновить его значениепосле того, как я передам его в свою subGenreNames функцию.

Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

На ваш вопрос в комментариях был дан ответ @ Егор , поэтому я просто опубликую ответ, чтобы вы могли его решить:

it в labda является неизменным, но фактическимсеттер обращается к внутреннему полю subGenres, которое, я думаю, является val. Измените subGenres на var.

0 голосов
/ 29 октября 2019

Вы уверены, что хотите изменить subGenres вместо создания нового списка с обновленными значениями? Чем больше путь Котлина будет

val withSubGenreNames = results.map {
            it.copy(subGenres = subGenreNames(it.subGenres))
}

, где copy - магический метод, если ваш it равен data class.

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

...