Как изменить значение пары в аргументах в Kotlin - PullRequest
0 голосов
/ 18 декабря 2018

Я знаю, что пара неизменна в Котлине.Вопрос в том, что аргументы также неизменны в Котлине.Поэтому, когда я получил такой код,

fun bind(pair: Pair<String, Boolean>) {
   // Change pair value here
}

pair = pair.copy () здесь не работает.Я не знаю, как это сделать.

Ответы [ 3 ]

0 голосов
/ 18 декабря 2018

Поскольку Pair является неизменным, вы не можете просто заменить значение пары, если вы не используете отражение.Либо замените Pair на что-то изменчивое, либо оставайтесь с ним и возвращайте новое Pair вместо этого либо с copy (устанавливая только некоторые значения), либо со следующим:

fun bind(pair: Pair<String, Boolean>) = pair.let { (left, right) -> // destructuring
  // exchange pair values here... just showing a sample:
  left.toInt() to right.toString() // this is basically the same as Pair(left.toInt(), right.toString())
} // in this example it returns a Pair<Int, String>

Пока вы можетевероятно, представьте свой собственный MutablePair -класс, я бы предпочел придерживаться неизменности и адаптировать ваш код для соответствующей обработки.Изменчивость может быть проблемой;тем более, если кто-то еще не ожидает, что ваша пара изменчива.

0 голосов
/ 18 декабря 2018

Вы не можете записать в само значение pair, поскольку оно неизменное , вместо этого создайте копию значения следующим образом:

val pair2 = pair.copy()

И вместо этого используйте значение pair2самого pair.

Также см. этот полезный ответ .

0 голосов
/ 18 декабря 2018

Вы можете использовать copy() для создания измененной копии.(Работает для каждого класса данных. )

fun bind(pair: Pair<String, Boolean>) {
   val pairCopy = pair.copy(first = "something else")
}

Затем используйте pairCopy в следующем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...