rc.rs
This commit is contained in:
@@ -1,15 +1,38 @@
|
|||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
|
||||||
fn main() {
|
enum List {
|
||||||
let a = Rc::new(0);
|
Cons(i32, Rc<List>),
|
||||||
|
Nil,
|
||||||
println!("{}", Rc::strong_count(&a));
|
}
|
||||||
let b = a.clone();
|
|
||||||
println!("{}", Rc::strong_count(&a));
|
use List::{ Cons, Nil, };
|
||||||
let c = Rc::clone(&a);
|
|
||||||
println!("{}", Rc::strong_count(&a));
|
fn print_list(list: &List) {
|
||||||
|
match list {
|
||||||
println!("{}", a);
|
Cons(i, list) => {
|
||||||
println!("{}", b);
|
println!("i -> {}", i);
|
||||||
println!("{}", c);
|
print_list(&list);
|
||||||
|
},
|
||||||
|
Nil => (),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn print_list2(mut list: &List) {
|
||||||
|
while let Cons(i, next_list) = list {
|
||||||
|
println!("i --> {}", i);
|
||||||
|
list = next_list;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let a = Rc::new(Cons(5, Rc::new(Cons(10, Rc::new(Nil)))));
|
||||||
|
let b = Cons(3, Rc::clone(&a));
|
||||||
|
let c = Cons(4, a.clone());
|
||||||
|
|
||||||
|
println!("print a");
|
||||||
|
print_list(&a);
|
||||||
|
println!("print b");
|
||||||
|
print_list(&b);
|
||||||
|
println!("print c");
|
||||||
|
print_list2(&c);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user