Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
fn main() {
let alice = Person { name: String::from("Alice"), age: 30 };
baz(&alice); // работает
bin(&alice); // ошибка!
bin(&mut alice); // а это работает
} let mut alice = Person { name: String::from("Alice"), age: 30 };Объяснение в статье только больше запутывает. Ставните:
fn foo(mut person: Person) { unimplemented!() }
fn bar(person: Person) { unimplemented!() }и
fn baz(person: &Person) { unimplemented!() }
fn bin(person: &mut Person) { unimplemented!() }Очевидно же, что в первом случае mut относится к имени аргумента, которое привязывается к значению уже внутри функции, а во втором случае mut — это часть типа.
Rust crashcourse. Правило трёх — параметры, итераторы и замыкания