Kotlin - Использование apply или также на hashmap не работает должным образом - PullRequest
0 голосов
/ 15 мая 2018

Вот фрагмент кода, в котором я пытаюсь создать несколько параметров запроса для вызова API.

Приведенные ниже функции пытаются добавить запись в существующий хэш-файл:

// Using Apply to insert another entry : 

fun getParamsUsingApply(): HashMap<String, String> {
    return getBasicParams().apply { KEY to ANOTHER_VALUE }
}


// Using also to insert another entry :  

fun getParamsUsingAlso(): HashMap<String, String> {
    return getBasicParams().also { KEY to ANOTHER_VALUE }
}

IЯ нахожу это непонятным, я ожидаю, что в моем хэш-файле выше будет новая запись в обоих случаях, если я вызову любую из функций.

Однако это не так.

Есть идеи, почему это не работает, как я ожидаю?

1 Ответ

0 голосов
/ 15 мая 2018

Функции apply и also не обновляют хэш-карту;они просто исполняют лямбду, переданную им.В вашем случае лямбда-пара создает пару, которая затем отбрасывается, потому что другие операции над ней не выполняются.

Если вы хотите вернуть карту с добавленной записью, вы можете сделать, например, эту:

return basicParams + mapOf(KEY to ANOTHER_VALUE)

Или, если вы хотите использовать apply (обратите внимание, что это изменит карту, возвращаемую getBasicParams, в то время как предыдущий фрагмент создаст новую карту):

return getBasicParams().apply { this[KEY] = ANOTHER_VALUE }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...