| 230 | } |
| 231 | |
| 232 | fn strings(){ |
| 233 | // ------------------------------------------------------------------------ |
| 234 | // STRINGS & str |
| 235 | // The String type is a heap-allocated string. |
| 236 | // This string is growable and is also guaranteed to be UTF-8. |
| 237 | // In general, you should use String when you need ownership, and &str when you just need to borrow a string. |
| 238 | // The String data type is a UTF-8 encoded vector. But you can not index into a String because of encoding. |
| 239 | |
| 240 | println!("\n======================================================================"); |
| 241 | println!("* STRINGS: "); |
| 242 | |
| 243 | println!("1. Conversions: "); |
| 244 | println!("\n\tA.Str -> String"); |
| 245 | let s1: &str = "str"; // &str |
| 246 | pvar!(s1); |
| 247 | println!("\tlet s1 = s1.to_string();"); |
| 248 | let s1 = s1.to_string(); // &str -> String |
| 249 | pvar!(s1); |
| 250 | |
| 251 | println!("\n\tB.String -> str"); |
| 252 | let s2 = String::from("String"); // String |
| 253 | pvar!(s2); |
| 254 | println!("\tlet s2 = s2.as_str();"); |
| 255 | let s2 = s2.as_str(); // String -> &str |
| 256 | pvar!(s2); |
| 257 | |
| 258 | println!("\n\tC.String -> Integer"); |
| 259 | let s3: String = String::from("10"); |
| 260 | pvar!(s3); |
| 261 | let s3:i32 = s3.parse().expect("Please enter a valid number."); |
| 262 | println!("\tlet s3:i32 = s3.parse().expect(\"Please enter a valid number.\");"); |
| 263 | pvar!(s3); |
| 264 | |
| 265 | println!("\n\tD.Integer -> String"); |
| 266 | let s4: i32 = 50; |
| 267 | pvar!(s4); |
| 268 | let s4 = s4.to_string(); |
| 269 | println!("\tlet s4 = s4.to_string();"); |
| 270 | pvar!(s4); |
| 271 | |
| 272 | // ------------------------------------------------------------------------ |
| 273 | println!("\n---------------------------------------\n"); |
| 274 | println!("2. Concatenations: "); |
| 275 | |
| 276 | // All bellow codes return `String`; something |
| 277 | let (s1, s2) = ("some", "thing"); // both &str |
| 278 | println!("let (s1, s2) = (\"some\", \"thing\"); // both &str"); |
| 279 | |
| 280 | let s = String::from(s1) + s2; // String + &str |
| 281 | println!("\n\tA. let s = String::from(s1) + s2; // String + &str"); |
| 282 | pvar!(s); |
| 283 | |
| 284 | let mut s = String::from(s1); // String |
| 285 | s.push_str(s2); // + &str |
| 286 | println!("\n\tB. let mut s = String::from(s1); // String"); |
| 287 | println!("\ts.push_str(s2); // + &str"); |
| 288 | pvar!(s); |
| 289 | |