Сообщение Re: мутабельные слайсы и borrow checker от 16.02.2023 10:39
Изменено 16.02.2023 10:41 ArtDenis
Re: мутабельные слайсы и borrow checker
Здравствуйте, sergii.p, Вы писали:
SP>споткнулся на такой забавный момент. Пока не понимаю причины
SP>...
SP>Мне казалось что первый код должен автоматом переходить во второй. Но получается диапазоны вносят какие-то модификации в этот алгоритм.
Если в коде
"рассахарить" последнюю строку, то получится
Первый аргумент (&mut nums) функции Index::index уникально заимствует nums, поэтому во второй аргумент nums уже передать нельзя
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>Мне казалось что первый код должен автоматом переходить во второй. Но получается диапазоны вносят какие-то модификации в этот алгоритм.
Если в коде
"рассахарить" последнюю строку, то получится
Первый аргумент (&mut nums) функции Index::index уникально заимствует nums, поэтому во второй аргумент nums уже передать нельзя
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 уже передать нельзя