Читаем Rust by Example полностью

// `&'static str` is a reference to a string allocated in read only memory

author: &'static str,

title: &'static str,

year: u32,

}

// This function takes a reference to a book

fn borrow_book(book: &Book) {

println!("I immutably borrowed {} - {} edition", book.title, book.year);

}

// This function takes a reference to a mutable book and changes `year` to 2014

fn new_edition(book: &mut Book) {

book.year = 2014;

println!("I mutably borrowed {} - {} edition", book.title, book.year);

}

fn main() {

// Create an immutable Book named `immutabook`

let immutabook = Book {

// string literals have type `&'static str`

author: "Douglas Hofstadter",

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

year: 1979,

};

// Create a mutable copy of `immutabook` and call it `mutabook`

let mut mutabook = immutabook;

// Immutably borrow an immutable object

borrow_book(&immutabook);

// Immutably borrow a mutable object

borrow_book(&mutabook);

// Borrow a mutable object as mutable

new_edition(&mut mutabook);

// Error! Cannot borrow an immutable object as mutable

new_edition(&mut immutabook);

// FIXME ^ Comment out this line

}

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

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

<p id="see_also_47"><strong><a l:href="#see_also_47">See also:</a></strong></p>

static

<p id="aliasing_1"><strong><a l:href="#aliasing_1">Aliasing</a></strong></p>

Data can be immutably borrowed any number of times, but while immutably borrowed, the original data can't be mutably borrowed. On the other hand, only one mutable borrow is allowed at a time. The original data can be borrowed again only after the mutable reference has been used for the last time.

struct Point { x: i32, y: i32, z: i32 }

fn main() {

let mut point = Point { x: 0, y: 0, z: 0 };

let borrowed_point = &point

let another_borrow = &point

// Data can be accessed via the references and the original owner

println!("Point has coordinates: ({}, {}, {})",

borrowed_point.x, another_borrow.y, point.z);

// Error! Can't borrow `point` as mutable because it's currently

// borrowed as immutable.

// let mutable_borrow = &mut point;

// TODO ^ Try uncommenting this line

// The borrowed values are used again here

println!("Point has coordinates: ({}, {}, {})",

borrowed_point.x, another_borrow.y, point.z);

// The immutable references are no longer used for the rest of the code so

// it is possible to reborrow with a mutable reference.

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

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

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

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

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

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