diff --git a/rustbyexample/fn.d/closures.d/capture.rs b/rustbyexample/fn.d/closures.d/capture.rs new file mode 100644 index 0000000..c8bcac7 --- /dev/null +++ b/rustbyexample/fn.d/closures.d/capture.rs @@ -0,0 +1,36 @@ +fn main() { + use std::mem; + + let color = String::from("green"); + + let print = || println!("`color`: {}", color); + + print(); + + let _reborrow = &color; + print(); + + let _color_moved = color; + + let mut count = 0; + + let mut inc = || { + count += 1; + println!("`count`: {}", count); + }; + + inc(); + + inc(); + + let _count_reborrowed = &mut count; + + let movable = Box::new(3); + + let consume = || { + println!("`movable`: {:?}", movable); + mem::drop(movable); + }; + + consume(); +} diff --git a/rustbyexample/fn.d/closures.d/capture2.rs b/rustbyexample/fn.d/closures.d/capture2.rs new file mode 100644 index 0000000..80f8480 --- /dev/null +++ b/rustbyexample/fn.d/closures.d/capture2.rs @@ -0,0 +1,8 @@ +fn main() { + let haystack = vec![1, 2, 3]; + + let contains = move |needle| haystack.contains(needle); + + println!("{}", contains(&1)); + println!("{}", contains(&4)); +}