rustbook_learning_guide/
ownership_borrowing.rs1pub fn ownership_examples() {
8 println!("\nš Ownership Examples");
9 println!("{}", "-".repeat(20));
10
11 let s1 = String::from("hello");
13 let s2 = s1; println!("s2: {}", s2);
16
17 let s3 = String::from("world");
19 let s4 = s3.clone();
20 println!("s3: {}, s4: {}", s3, s4);
21
22 let s = String::from("hello");
24 takes_ownership(s);
25 let x = 5;
28 makes_copy(x);
29 println!("x is still valid: {}", x); }
31
32fn takes_ownership(some_string: String) {
33 println!("Taking ownership of: {}", some_string);
34} fn makes_copy(some_integer: i32) {
37 println!("Making copy of: {}", some_integer);
38} pub fn borrowing_examples() {
42 println!("\nš Borrowing Examples");
43 println!("{}", "-".repeat(20));
44
45 let s1 = String::from("hello");
46 let len = calculate_length(&s1);
47 println!("The length of '{}' is {}.", s1, len);
48
49 let mut s = String::from("hello");
51 change(&mut s);
52 println!("Changed string: {}", s);
53
54 let r1 = &s;
56 let r2 = &s;
57 println!("r1: {}, r2: {}", r1, r2);
58
59 let r3 = &mut s;
61 println!("r3: {}", r3);
62}
63
64fn calculate_length(s: &String) -> usize {
65 s.len()
66} fn change(some_string: &mut String) {
69 some_string.push_str(", world");
70}
71
72pub fn slice_examples() {
73 println!("\nš° Slice Examples");
74 println!("{}", "-".repeat(20));
75
76 let s = String::from("hello world");
77
78 let hello = &s[0..5];
80 let world = &s[6..11];
81 let whole = &s[..]; println!("hello: {}, world: {}, whole: {}", hello, world, whole);
84
85 let a = [1, 2, 3, 4, 5];
87 let slice = &a[1..3];
88 println!("Array slice: {:?}", slice);
89
90 let word = first_word(&s);
92 println!("First word: {}", word);
93}
94
95fn first_word(s: &str) -> &str {
96 let bytes = s.as_bytes();
97
98 for (i, &item) in bytes.iter().enumerate() {
99 if item == b' ' {
100 return &s[0..i];
101 }
102 }
103
104 &s[..]
105}
106
107
108
109
110
111
112
113