Что эквивалентно указателям C ++ на Kotlin? - PullRequest
0 голосов
/ 07 января 2020

У меня есть метод, который меняет значение двух переменных.

void switchValue(int* a , int* b){
      //logic here...
}

C ++ работает на более низком уровне, чем Kotlin, но могу ли я сделать это на Kotlin?

1 Ответ

2 голосов
/ 07 января 2020

Это невозможно сделать с помощью функции в Kotlin или Java, поскольку ссылки могут передаваться только по значению. (Если вы не удовлетворены использованием класса-оболочки и не поменяете местами ссылки на два экземпляра-оболочки, но это будет неуклюже.)

Вероятно, это самый простой способ поменять значения двух переменных:

var x = 0
var y = 1

//swap:
x = y.also { y = x }

Редактировать: Немного исправления. Вы можете сделать это со свойствами, используя отражение. Это не сработает с локальными переменными.

fun <T> swap(first: KMutableProperty0<T>, second: KMutableProperty0<T>) {
    first.set(second.get().also { second.set(first.get()) })
}

swap(::x, ::y)

По моему мнению, такого рода практики (удаленное изменение значений переменных), хотя и распространенные в C / C ++, следует избегать.

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