Переназначение переменных посредством деструктурирования

Мне нравятся функции деструктурирования Kotlin, они помогают мне указывать код и фокусироваться на существенном.

Я столкнулся с ситуацией, для которой я не мог понять правильный синтаксис, как я могу переназначить переменные через деструкцию?

var (start, end) = startEndDate(198502)

// intellij neither accept this ...
start, end = startEndDate(200137)

// ... nor this
(start, end) = startEndDate(200137)

Ответ 1

С точки зрения языка переменные, объявленные в объявлении деструктурирования, являются отдельными независимыми переменными, и в настоящее время Kotlin не предоставляет способ присвоить несколько переменных в одном выражении.

Вы можете снова разрушить свое выражение и назначить переменные по очереди:

var (start, end) = startEndDate(198502)

val (newStart, newEnd) = startEndDate(200137)
start = newStart
end = newEnd

Если вам нужно показать, что эти две переменные имеют какое-то особое значение и должны быть назначены вместе, вы можете объявить локальную функцию, которая переназначает их следующим образом:

var (start, end) = startEndDate(198502)
fun setStartEnd(pair: Pair<SomeType, SomeType>) { start = pair.first; end = pair.second }

setStartEnd(startEndDate(200137))