такое вижу и не совсем пойму.
fn some_func<T>(mut value: &mut T){}
Вопрос, зачем вообще нужно mut value ? Это паттерн матчинг такой ?
Означает что ты мутировать будешь данные в теле функции
let mut a = &mut 0; *a += 1; let b = a; a = &mut 2;
fn main() { let a = &mut 0; *a += 1; } Это рабочий код если что
Эм, а при обычном value: &mut T, я что, не в теле функции это делаю ?
let mut v: &mut T = ...; Означает что у тебя есть переменная v в которой лежит мутабельное значение мутабельное ссылки
Рабочий, как ни странно.
&mut T - иммутабельная переменная, мутабельная ссылка mut &mut T - мутабельная переменная, мутабельная ссылка
В случае mut &mut T можно переприсвоить ссылку в переменную
Ты не сможешь присвоить что-то в value новое Всм новую ссылку туда По старой писать можно Слоумод ыаааааы
Если совсем непонятно, то смотри сюда: fn asd<T: Iterator<Item=()>>(t: &mut T) { let next = t.next(); } fn qwe<T: Default>(mut t: T) { t = T::Default(); }
mut t: &mut T — это просто совмещение этих двух хреновин, чтобы можно было написать что-нибудь вроде fn zxc<T: Iterator<Item=()> + Default>(mut t: &mut T) { let item_from_old_iter = t.next(); let mut new_iter = T::default(); t = &mut new_iter; let item_from_new_iter = t.next(); }
Обсуждают сегодня