Информация об изменениях

Сообщение Re: мутабельные слайсы и borrow checker от 16.02.2023 10:39

Изменено 16.02.2023 10:41 ArtDenis

Re: мутабельные слайсы и borrow checker
Здравствуйте, sergii.p, Вы писали:

SP>споткнулся на такой забавный момент. Пока не понимаю причины

SP>...
SP>Мне казалось что первый код должен автоматом переходить во второй. Но получается диапазоны вносят какие-то модификации в этот алгоритм.

Если в коде
fn main() {
    let mut nums = [1, 2, 3, 4, 5, 6, 7];
    let some_bad_ref = &mut nums[0..nums.len() - 1];
}


"рассахарить" последнюю строку, то получится

...
let some_bad_ref = std::ops::Index::index(&mut nums, 0..nums.len()-1);


Первый аргумент (&mut nums) функции Index::index уникально заимствует nums, поэтому во второй аргумент nums уже передать нельзя
Re: мутабельные слайсы и borrow checker
Здравствуйте, sergii.p, Вы писали:

SP>споткнулся на такой забавный момент. Пока не понимаю причины

SP>...
SP>Мне казалось что первый код должен автоматом переходить во второй. Но получается диапазоны вносят какие-то модификации в этот алгоритм.

Если в коде
fn main() {
    let mut nums = [1, 2, 3, 4, 5, 6, 7];
    let some_bad_ref = &mut nums[0..nums.len() - 1];
}


"рассахарить" последнюю строку, то получится

...
let some_bad_ref = std::ops::IndexMut::index_mut(&mut nums, 0..nums.len()-1);


Первый аргумент (&mut nums) функции Index::index уникально заимствует nums, поэтому во второй аргумент nums уже передать нельзя