-
Notifications
You must be signed in to change notification settings - Fork 0
/
mut-and-immut.rs
69 lines (60 loc) · 1.2 KB
/
mut-and-immut.rs
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#[derive(Debug)]
struct X {
pub a: Option<usize>,
pub b: Option<usize>,
}
impl X {
fn get_a(&self) -> &Option<usize> {
&self.a
}
}
#[derive(Debug)]
struct Y<'a> {
a: &'a Option<usize>,
}
fn main() {
let mut x = X { a: Some(3), b: Some(4)};
let a = &x.a;
println!("{:p}", a);
let a = &x.a;
println!("{:p}", a);
let a = x.get_a();
println!("{:p}", a);
let y = Y { a };
// x.b = Some(2);
println!("{:#?}", x);
println!("{:#?}", y);
}
fn main2() {
let mut x = X { a: Some(3), b: Some(4)};
// let a = &x.a;
let a = &x.get_a();
let y = Y { a };
// x.b = Some(2);
println!("{:#?}", x);
println!("{:#?}", y);
}
fn main3() {
let mut x = X { a: Some(3), b: Some(4)};
// let a = &x.a;
//let a = &(*x.get_a());
let a = x.get_a();
let y = Y { a };
// x.b = Some(2);
println!("{:#?}", x);
println!("{:#?}", y);
}
fn two_mut_refs_direct() {
let mut x = X { a: Some(3), b: Some(4)};
let a = &mut x.a;
let b = &mut x.b;
*a = Some(2);
*b = Some(3);
println!("{:#?}", a);
}
fn mut_x_mod(x: &mut X) {
let a = &mut x.a;
let b = &mut x.b;
*a = Some(2);
*b = Some(3);
}