From 7e0aa3b86bd898e83f2187279cc1b7620ef96976 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Sun, 1 Oct 2023 06:01:54 -0400 Subject: [PATCH] fn closures in RBE --- rustbyexample/fn.d/closures.d/capture.rs | 36 +++++++++++++++++++++++ rustbyexample/fn.d/closures.d/capture2.rs | 8 +++++ 2 files changed, 44 insertions(+) create mode 100644 rustbyexample/fn.d/closures.d/capture.rs create mode 100644 rustbyexample/fn.d/closures.d/capture2.rs 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)); +}