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
#[test]
fn test() {
pub trait Get {
type S;
fn get(self) -> Self::S;
}
pub trait Update {
type T;
fn update(
self,
x: Self::T,
);
}
struct A(usize);
impl<'a> Get for &'a mut A {
type S = &'a mut usize;
fn get(self) -> Self::S {
&mut self.0
}
}
impl Update for &mut A {
type T = A;
fn update(
self,
x: A,
) {
*self = x
}
}
let mut a = A(2);
a.update(A(3));
println!("{}", a.get());
*a.get() = 5;
println!("{}", a.get());
}