Почему заимствования не допускаются в аргументе изменяемой функции

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

if folder_file_paths.len() > compressed_data.len() {
    compressed_data.reserve(folder_file_paths.len() - compressed_data.len() );
}

Я получаю эту ошибку:

error[E0502]: cannot borrow `compressed_data` as immutable because it is also borrowed as mutable
   --> src/ImageMatching/main.rs:33:59
   |
33 |         compressed_data.reserve(folder_file_paths.len() - compressed_data.len() );
   |         ---------------                                   ^^^^^^^^^^^^^^^       - mutable borrow ends here
   |         |                                                 |
   |         mutable borrow occurs here                        immutable borrow occurs here

Но я не могу придумать причину, почему это проблема, так как не следует сначала обрабатывать аргумент, usize значение будет скопировано, а затем reserve функция запуска?

Когда аргумент функции будет вычислен после того, как фактическая функция начнет выполняться?

Редактировать: folder_file_path это Vec, а также compressed_data это HashMap

0 ответов

Другие вопросы по тегам