Rust provides powerful abstractions for managing memory safely and efficiently. One such abstraction is Rc
(Reference Counting), which allows multiple ownership of data. When combined with RefCell
, it unlocks the ability to mutate data through shared ownership safely at runtime.
In this challenge, you'll use Rc
and RefCell
together to explore the concept of Interior Mutability in Rust.
Implement the following functions to demonstrate shared ownership and interior mutability:
push
:
Rc<RefCell<Vec<T>>>
as input.RefCell
.iterate_and_print_shared_data
:
Rc<RefCell<Vec<T>>>
as input.plus_one
:
Rc<RefCell<i32>
as input.RefCell
by one.Rc
to share ownership of the vector.RefCell
to allow interior mutability.If you're stuck, here are some hints to help you solve the challenge:
Rc::clone
to share ownership of the vector.RefCell
's .borrow_mut()
for mutable access and .borrow()
for immutable access.T: Display
is needed to format the output with println!
.use std::cell::RefCell;use std::fmt::Display;use std::ops::{ Add, Sub };use std::rc::Rc;pub fn push<T: Clone>(data: Rc<RefCell<Vec<T>>>, element: T) { // 1. Finish the function data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: Display>(data: Rc<RefCell<Vec<T>>>) { // 2. Borrow the data and print each item for item in data.as_ref().take().iter() { println!("{}", item); }}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { // 1. Finish the function data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: std::fmt::Display>(data: Rc<RefCell<Vec<T>>>) { // 2. Borrow the data and print each item data.borrow().iter().for_each(|item| println!("{item}"));}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;use std::fmt::Display;pub fn push<T: Display>(data: Rc<RefCell<Vec<T>>>, element: T) { data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: Display>(data: Rc<RefCell<Vec<T>>>) { // 2. Borrow the data and print each item data.borrow().iter().for_each(|x|{ println!("{x}"); });}pub fn plus_one(data: Rc<RefCell<i32>>) { *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::fmt::Display;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { // 1. Finish the function data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: Display>(data: Rc<RefCell<Vec<T>>>) { // 2. Borrow the data and print each item data.borrow().iter().for_each(|a| println!("{}", a))}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { let mut v = data.borrow_mut(); v.push(element); }pub fn iterate_and_print_shared_data<T: std::fmt::Display>(data: Rc<RefCell<Vec<T>>>) { for i in data.borrow().iter(){ println!("{}",i); }}pub fn plus_one(data: Rc<RefCell<i32>>) { *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::fmt::Display;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { // 1. Finish the function data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T>(data: Rc<RefCell<Vec<T>>>)where T: Display,{ // 2. Borrow the data and print each item data.borrow().iter().for_each(|value| println!("{value}"));}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;use std::fmt::Display;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { // 1. Finish the function Rc::clone(&data).borrow_mut().push(element)}pub fn iterate_and_print_shared_data<T:Display>(data: Rc<RefCell<Vec<T>>>) { // 2. Borrow the data and print each item for elt in Rc::clone(&data).borrow().iter(){ println!("{}", &elt); }}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function *Rc::clone(&data).borrow_mut() += 1}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { // 1. Finish the function data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: std::fmt::Display>(data: Rc<RefCell<Vec<T>>>) { // 2. Borrow the data and print each item data.borrow().iter().for_each(|item| println!("{item}"));}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function let mut data = data.borrow_mut(); *data += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { data.borrow_mut().push(element); // 1. Finish the function}pub fn iterate_and_print_shared_data<T: std::fmt::Display>(data: Rc<RefCell<Vec<T>>>) { for item in data.borrow().iter() { println!("{}", item); } // 2. Borrow the data and print each item}pub fn plus_one(data: Rc<RefCell<i32>>) { *data.borrow_mut() += 1; // 3. Finish the function}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;use std::fmt::Display;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { // 1. Finish the function let mut vec = data.borrow_mut(); vec.push(element);}pub fn iterate_and_print_shared_data<T: Display>(data: Rc<RefCell<Vec<T>>>) { // 2. Borrow the data and print each item for i in data.borrow().iter() { println!("{}", i); }}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function let mut value = data.borrow_mut(); *value += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::fmt::Display;use std::ops::{AddAssign};use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: Display>(data: Rc<RefCell<Vec<T>>>) { data.borrow().iter().for_each(|x| println!("{}", x));}pub fn plus_one(data: Rc<RefCell<i32>>) { data.borrow_mut().add_assign(1);}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;use std::fmt::Display;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: Display>(data: Rc<RefCell<Vec<T>>>) { for item in &*data.borrow() { println!("{}", item); }}pub fn plus_one(data: Rc<RefCell<i32>>) { *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;use std::fmt::Display;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: Display>(data: Rc<RefCell<Vec<T>>>) { for item in &*data.borrow() { println!("{}", item); }}pub fn plus_one(data: Rc<RefCell<i32>>) { *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::ops::Add;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { // We use borrow mut to borrow the vec as mutable. let mut s = data.borrow_mut(); s.push(element);}pub fn iterate_and_print_shared_data<T: std::fmt::Display>(data: Rc<RefCell<Vec<T>>>) { data.borrow().iter().for_each(|element| { println!("{}", element); });}pub fn plus_one(data: Rc<RefCell<i32>>) { let mut s = data.borrow_mut(); *s += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T>(data: Rc<RefCell<Vec<T>>>)where T: std::fmt::Display,{ data.borrow().iter().for_each(|item| println!("{item}"));}pub fn plus_one(data: Rc<RefCell<i32>>) { *data.borrow_mut() += 1}pub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;use std::fmt::Display;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { // 1. Finish the function data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: Display>(data: Rc<RefCell<Vec<T>>>) { // 2. Borrow the data and print each item data.borrow().iter().for_each(|e| println!("{}", e));}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::fmt::Display;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: Display>(data: Rc<RefCell<Vec<T>>>) { data.borrow().iter().for_each(|el| println!("{}", el));}pub fn plus_one(data: Rc<RefCell<i32>>) { *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;use std::fmt::Display;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T)whereT: Display{ // 1. Finish the function let data_ref = &mut *data.borrow_mut(); data_ref.push(element);}pub fn iterate_and_print_shared_data<T>(data: Rc<RefCell<Vec<T>>>) where T: Display{ // 2. Borrow the data and print each item for d in &*data.borrow() { println!("{}",d); }}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function let refe = &mut *data.borrow_mut(); *refe += 1}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;use std::fmt::Display;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: Display>(data: Rc<RefCell<Vec<T>>>) { data.borrow().iter().for_each(|item| println!("{}", item))}pub fn plus_one(data: Rc<RefCell<i32>>) { *data.borrow_mut() += 1}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: std::fmt::Display>(data: Rc<RefCell<Vec<T>>>) { data.borrow().iter().for_each(|e| println!("{e}"));}pub fn plus_one(data: Rc<RefCell<i32>>) { *data.borrow_mut() += 1; }// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::fmt::Display;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { // 1. Finish the function data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T>(data: Rc<RefCell<Vec<T>>>)where T: Display,{ // 2. Borrow the data and print each item data.borrow().iter().for_each(|element| { println!("{}", element); });}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc; use std::ops::Deref;pub fn push<T: std::fmt::Display>(data: Rc<RefCell<Vec<T>>>, element: T) { // 1. Finish the function data.deref().borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: std::fmt::Display>(data: Rc<RefCell<Vec<T>>>) { // 2. Borrow the data and print each item data.deref().borrow().iter().for_each(|x| println!("{}", *x));}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::fmt::Display;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: Display>(data: Rc<RefCell<Vec<T>>>) { data.borrow().iter().for_each(|e| println!("{e}"));}pub fn plus_one(data: Rc<RefCell<i32>>) { *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::fmt::Display;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: Display>(data: Rc<RefCell<Vec<T>>>) { for i in data.borrow().iter() { println!("{i}") }}pub fn plus_one(data: Rc<RefCell<i32>>) { *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::fmt::Display;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: Display>(data: Rc<RefCell<Vec<T>>>) { data.borrow().iter().for_each(|elem| println!("{elem}"));}pub fn plus_one(data: Rc<RefCell<i32>>) { *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;use std::fmt::{Debug, Display};pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { // 1. Finish the function data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: Debug+Display>(data: Rc<RefCell<Vec<T>>>) { // 2. Borrow the data and print each item for item in data.borrow().iter() { println!("{}", item); }}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::fmt::Display;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { // 1. Finish the function data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: Display>(data: Rc<RefCell<Vec<T>>>) { // 2. Borrow the data and print each item data.borrow().iter().for_each(|item| { println!("{}", item); });}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::fmt::Display;use std::rc::Rc;pub fn push<T: Copy>(data: Rc<RefCell<Vec<T>>>, element: T) { // 1. Finish the function data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: Display>(data: Rc<RefCell<Vec<T>>>) { // 2. Borrow the data and print each item data.borrow().iter().for_each(|val| println!("{}", val));}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::fmt::Display;use std::rc::Rc;pub fn push<T: Copy>(data: Rc<RefCell<Vec<T>>>, element: T) { // 1. Finish the function data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: Display>(data: Rc<RefCell<Vec<T>>>) { // 2. Borrow the data and print each item data.borrow().iter().for_each(|val| println!("{}", val));}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: std::fmt::Display>(data: Rc<RefCell<Vec<T>>>) { for item in data.borrow().iter() { println!("{item}"); }}pub fn plus_one(data: Rc<RefCell<i32>>) { *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;use std::fmt::Display;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { // 1. Finish the function let mut v = data.borrow_mut(); v.push(element);}pub fn iterate_and_print_shared_data<T>(data: Rc<RefCell<Vec<T>>>)where T: Display,{ // 2. Borrow the data and print each item let v = data.borrow(); for x in &*v { println!("{x}") }}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function let mut count = data.borrow_mut(); *count += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::fmt::Display;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: Display>(data: Rc<RefCell<Vec<T>>>) { for item in data.borrow().iter() { println!("{}", item) }}pub fn plus_one(data: Rc<RefCell<i32>>) { let mut r = data.borrow_mut(); *r += 1}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { // 1. Finish the function data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: std::fmt::Display>(data: Rc<RefCell<Vec<T>>>) { // 2. Borrow the data and print each item for item in data.borrow().iter() { println!("{}", item); }}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function let mut data = data.borrow_mut(); *data += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T>(data: Rc<RefCell<Vec<T>>>)where T: std::fmt::Display,{ data.borrow().iter().for_each(|i| println!("{i}"));}pub fn plus_one(data: Rc<RefCell<i32>>) { *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { // 1. Finish the function data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T>(data: Rc<RefCell<Vec<T>>>) where T: std::fmt::Display { // 2. Borrow the data and print each item data.borrow().iter().for_each(|x| println!("{}", x));}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { // 1. Finish the function data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T>(data: Rc<RefCell<Vec<T>>>) where T : std::fmt::Display { // 2. Borrow the data and print each item data.borrow().iter().for_each(|x| println!("{}", x));}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function let mut data_ref = data.borrow_mut(); *data_ref += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T){ // 1. Finish the function (*data.borrow_mut()).push(element);}pub fn iterate_and_print_shared_data<T>(data: Rc<RefCell<Vec<T>>>) where T: std::fmt::Display,{ // 2. Borrow the data and print each item (*data.borrow()).iter().for_each(|x| println!("{}", x));}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function *data.borrow_mut() +=1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { // 1. Finish the function (*data.borrow_mut()).push(element);}pub fn iterate_and_print_shared_data<T>(data: Rc<RefCell<Vec<T>>>) where T : std::fmt::Display, { // 2. Borrow the data and print each item (*data.borrow()).iter().for_each(|e| println!("{}",e));}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { (*data).borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: std::fmt::Display>(data: Rc<RefCell<Vec<T>>>) { (*data).borrow().iter().for_each(|item| println!("{item}"))}pub fn plus_one(data: Rc<RefCell<i32>>) { *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { (*data).borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: std::fmt::Display>(data: Rc<RefCell<Vec<T>>>) { (*data).borrow().iter().for_each(|item| println!("{item}"))}pub fn plus_one(data: Rc<RefCell<i32>>) { *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::fmt::Display;use std::ops::Add;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { // 1. Finish the function data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T>(data: Rc<RefCell<Vec<T>>>)where T: Display,{ // 2. Borrow the data and print each item data.borrow() .iter() .for_each(|element| println!("{element}"));}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: std::fmt::Display>(data: Rc<RefCell<Vec<T>>>) { for d in data.borrow().iter() { println!("{d}"); }}pub fn plus_one(data: Rc<RefCell<i32>>) { *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { // 1. Finish the function data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T>(data: Rc<RefCell<Vec<T>>>)where T: std::fmt::Display,{ // 2. Borrow the data and print each item for item in data.borrow().iter() { println!("{}", item); }}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function *data.borrow_mut() += 1;}
use std::cell::RefCell;use std::fmt::Display;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { let mut d = data.borrow_mut(); d.push(element);}pub fn iterate_and_print_shared_data<T>(data: Rc<RefCell<Vec<T>>>)where T: Display,{ // 2. Borrow the data and print each item data.borrow().iter().for_each(|e| println!("{}", e));}pub fn plus_one(data: Rc<RefCell<i32>>) { let mut d = data.borrow_mut(); *d += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;use std::fmt::Display;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { // 1. Finish the function data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: Display>(data: Rc<RefCell<Vec<T>>>) { // 2. Borrow the data and print each item data.borrow().iter().for_each(|d| println!("{}", d));}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::fmt::Display;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: Display>(data: Rc<RefCell<Vec<T>>>) { data.borrow().iter().for_each(|element| println!("{element}"));}pub fn plus_one(data: Rc<RefCell<i32>>) { *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;use std::fmt::Display;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { // 1. Finish the function let mut data = data.borrow_mut(); data.push(element);}pub fn iterate_and_print_shared_data<T: Display>(data: Rc<RefCell<Vec<T>>>) { // 2. Borrow the data and print each item let data = data.borrow(); for item in data.iter() { println!("{}", item); }}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function let mut data = data.borrow_mut(); *data += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { // 1. Finish the function data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T>(data: Rc<RefCell<Vec<T>>>)where T: std::fmt::Display,{ // 2. Borrow the data and print each item data.borrow().iter().for_each(|x| println!("{x}"));}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use core::fmt;use std::cell::RefCell;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { // 1. Finish the function data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T>(data: Rc<RefCell<Vec<T>>>) where T : fmt::Display { // 2. Borrow the data and print each item for item in data.borrow().iter() { println!("{}", item); }}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}
use std::cell::RefCell;use std::rc::Rc;pub fn push<T>(data: Rc<RefCell<Vec<T>>>, element: T) { // 1. Finish the function data.borrow_mut().push(element);}pub fn iterate_and_print_shared_data<T: std::fmt::Display>(data: Rc<RefCell<Vec<T>>>) { // 2. Borrow the data and print each item for v in data.borrow().iter() { println!("{v}"); }}pub fn plus_one(data: Rc<RefCell<i32>>) { // 3. Finish the function *data.borrow_mut() += 1;}// Example usagepub fn main() { let shared_data = Rc::new(RefCell::new(vec![1, 2, 3])); // Updating shared data push(Rc::clone(&shared_data), 4); push(Rc::clone(&shared_data), 5); // Iterating and printing shared data println!("Shared Data:"); iterate_and_print_shared_data(Rc::clone(&shared_data)); let my_num = Rc::new(RefCell::new(5)); plus_one(Rc::clone(&my_num)); assert_eq!(*my_num.borrow(), 6, "Value was not incremented correctly.");}