-
Couldn't load subscription status.
- Fork 1.8k
Open
Description
The following test case cannot be understood without explanation of how rust handles the temporary values:
100-exercises-to-learn-rust/exercises/07_threads/06_interior_mutability/src/lib.rs
Lines 28 to 33 in d347d1f
| #[test] | |
| fn it_works() { | |
| let counter = Rc::new(RefCell::new(0)); | |
| let _ = DropTracker::new((), Rc::clone(&counter)); | |
| assert_eq!(*counter.borrow(), 1); | |
| } |
The use of the wildcard _ as the binding target in the test case
it_works() signals to the compiler that the value is only temporary, leading to its immediate drop at the statement's conclusion. In contrast, assigning to a named variable in the test case multiple() ensures the variable's full lifetime within its defining scope: 100-exercises-to-learn-rust/exercises/07_threads/06_interior_mutability/src/lib.rs
Lines 35 to 45 in d347d1f
| #[test] | |
| fn multiple() { | |
| let counter = Rc::new(RefCell::new(0)); | |
| { | |
| let a = DropTracker::new(5, Rc::clone(&counter)); | |
| let b = DropTracker::new(6, Rc::clone(&counter)); | |
| } | |
| assert_eq!(*counter.borrow(), 2); | |
| } |
To suppress the compiler warning, unused vars
a and b should be prefixed by _.Metadata
Metadata
Assignees
Labels
No labels