X-Git-Url: https://piware.de/gitweb/?p=learn-rust.git;a=blobdiff_plain;f=src%2Fmain.rs;h=06d122b9c4c727f399d8273312ffcfb2a95088fd;hp=718ecb5f22028762b437c4b87a60dac13f99c90c;hb=8c240f514e17c9a935f5f392e6a87779ae1c09e8;hpb=f026aa1e762803c4e784f82fd3830c9f936cf8d5 diff --git a/src/main.rs b/src/main.rs index 718ecb5..06d122b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -65,7 +65,7 @@ fn test_hashmaps() { println!("scores after doubling: {:?}", scores); // double scores of immutable hashmap (rebuild it) - let collect_scores: HashMap<_, _> = collect_scores.iter() + let collect_scores: HashMap<_, _> = collect_scores.into_iter() .map(|(k, v)| (k, 2 * v)) .collect(); println!("collect_scores after rebuilding with doubling: {:?}", collect_scores); @@ -137,10 +137,64 @@ fn test_generics() { println!("longest string: {}", l); } +fn test_closures() { + let mut expensive_int_result = Cacher::new(|x| { + println!("calculating expensive int result for {}", x); + 2 * x + }); + + println!("1st int call for value 1: {}", expensive_int_result.value(1)); + println!("2nd int call for value 1: {}", expensive_int_result.value(1)); + println!("1st int call for value 2: {}", expensive_int_result.value(2)); + + let mut expensive_str_result = Cacher::new(|x: &str| { + println!("calculating expensive str result for {}", x); + x.len() + }); + + println!("1st int call for value abc: {}", expensive_str_result.value("abc")); + println!("2nd int call for value abc: {}", expensive_str_result.value("abc")); + println!("1st int call for value defg: {}", expensive_str_result.value("defg")); +} + +fn test_iterators() { + let v1 = vec!["Hello", "good", "world"]; + // implied default is .into_iter() which consumes v1 + for s in v1.iter() { + println!("element: {}", s); + } + // can still use it now + println!("v1: {:?}", &v1); + + // manual iteration + let mut v1_iter = v1.iter(); + while let Some(e) = v1_iter.next() { + println!("while loop over iter: {}", e); + } + + for l_element in v1.iter().filter(|x| x.contains('l')) { + println!("v1 element containing 'l': {}", l_element); + } + + let v2 = vec![1, 2, 3]; + let double_v2: Vec<_> = v2.iter().map(|x| x * 2).collect(); + println!("doubled v2: {:?}", double_v2); + + for i in v2.into_iter().map(|x| x * 3) { + println!("for loop triplicating v2: {}", i); + } + + for i in Counter5::new() { + println!("Counter 5 value: {}", i); + } +} + fn main() { test_strings(); test_vectors(); test_hashmaps(); test_files(); test_generics(); + test_closures(); + test_iterators(); }