Читаем Rust на примерах полностью

// Получаем ссылку на данные, которые хранятся внутри упаковки

let _ref_to_i32: &i32 = &boxed_i32;

// Ошибка!

// Нельзя уничтожать упаковку `boxed_i32` пока данные внутри заимствованы.

eat_box_i32(boxed_i32);

// ИСПРАВЬТЕ ^ Закомментируйте эту строку

// `_ref_to_i32` покидает область видимости и больше не является заимствованным ресурсом.

}

// `boxed_i32` теперь может получить владение над `eat_box` и быть уничтожено

eat_box_i32(boxed_i32);

}

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

<p id="Изменяемость_2"><strong><a l:href="#Изменяемость_2">Изменяемость</a></strong></p>

Изменяемые данные могут быть заимствованы с возможностью изменения при помощи &mut T. Это называется изменяемая ссылка и даёт заимствующему возможность чтения и записи. В отличие от неё, &T заимствует данные через неизменяемую ссылку и заимствующий может читать данные, но не может модифицировать их:

#[allow(dead_code)]

#[derive(Clone, Copy)]

struct Book {

// `&'static str` - это ссылка на строку, расположенную в неизменяемой памяти

author: &'static str,

title: &'static str,

year: u32,

}

// Эта функция получает ссылку на книгу

fn borrow_book(book: &Book) {

println!("Я неизменяемо заимствовала {} - {} издания", book.title, book.year);

}

// Эта функция получает изменяемую ссылку на книгу и устанавливает поле `year` в 2014

fn new_edition(book: &mut Book) {

book.year = 2014;

println!("Я изменяемо заимствовала {} - {} издания", book.title, book.year);

}

fn main() {

// Создаём неизменяемую книгу в переменной `immutabook`

let immutabook = Book {

// строковый литерал имеет тип `&'static str`

author: "Douglas Hofstadter",

title: "Gödel, Escher, Bach",

year: 1979,

};

// Создаём изменяемую копию `immutabook` и называем её `mutabook`

let mut mutabook = immutabook;

// Неизменяемое заимствование неизменяемого объекта

borrow_book(&immutabook);

// Неизменяемое заимствование изменяемого объекта

borrow_book(&mutabook);

// Заимствование изменяемого объекта как изменяемого

new_edition(&mut mutabook);

// Ошибка! Нельзя заимствовать неизменяемый объект как изменяемый

new_edition(&mut immutabook);

// ИСПРАВЬТЕ ^ Добавьте комментарий для этой строки

}

Перейти на страницу:

Похожие книги

Компьютерные сети. 6-е изд.
Компьютерные сети. 6-е изд.

Перед вами шестое издание самой авторитетной книги по современным сетевым технологиям, написанное признанным экспертом Эндрю Таненбаумом в соавторстве со специалистом компании Google Дэвидом Уэзероллом и профессором Чикагского университета Ником Фимстером. Первая версия этого классического труда появилась на свет в далеком 1980 году, и с тех пор каждое издание книги неизменно становилось бестселлером. В книге последовательно изложены основные концепции, определяющие современное состояние компьютерных сетей и тенденции их развития. Авторы подробно объясняют устройство и принципы работы аппаратного и программного обеспечения, рассматривают все аспекты и уровни организации сетей — от физического до прикладного. Изложение теоретических принципов дополняется яркими, показательными примерами функционирования интернета и компьютерных сетей различного типа. Большое внимание уделяется сетевой безопасности. Шестое издание полностью переработано с учетом изменений, произошедших в сфере сетевых технологий за последние годы, и, в частности, освещает такие технологии, как DOCSIS, 4G и 5G, беспроводные сети стандарта 802.11ax, 100-гигабитные сети Ethernet, интернет вещей, современные транспортные протоколы CUBIC TCP, QUIC и BBR, программно-конфигурируемые сети и многое другое.

Дэвид Уэзеролл , Ник Фимстер , Эндрю Таненбаум

Учебные пособия, самоучители