1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
| #[allow(dead_code)]
#[derive(Clone, Copy)]
struct Book {
// `&'static str` 是一个对分配在只读内存区的字符串的引用
author: &'static str,
title: &'static str,
year: u32,
}
// 此函数接受一个对 Book 类型的引用
fn borrow_book(book: &Book) {
println!("I immutably borrowed {} - {} edition", book.title, book.year);
}
// 此函数接受一个对可变的 Book 类型的引用,它把年份 `year` 改为 2014 年
fn new_edition(book: &mut Book) {
book.year = 2014;
println!("I mutably borrowed {} - {} edition", book.title, book.year);
}
fn main() {
// 创建一个名为 `immutabook` 的不可变的 Book 实例
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);
// 改正 ^ 注释掉此行
}
|