From e8ad0f5d7eeaffe98e46ad4b382825f1bc055ca8 Mon Sep 17 00:00:00 2001 From: Kjetil Orbekk Date: Thu, 9 Jun 2016 21:00:57 -0400 Subject: Use closure to add nodes. --- rust/graph/graph.rs | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/rust/graph/graph.rs b/rust/graph/graph.rs index a4e2d11..648c131 100644 --- a/rust/graph/graph.rs +++ b/rust/graph/graph.rs @@ -9,26 +9,30 @@ struct Node { neighbors: Vec>>, } -fn main () { +fn make_graph() -> Vec>> { let mut nodes : Vec>> = Vec::new(); + { + let mut make_node = |label: i32| { + let node = Rc::new(RefCell::new(Node { + label: label, + neighbors: vec!() + })); + nodes.push(node.clone()); + node.clone() + }; - fn make_node(label: i32) -> Rc> { - Rc::new(RefCell::new(Node { - label: label, - neighbors: vec!() - })) + let node1 = make_node(1); + let node2 = make_node(2); + let node3 = make_node(3); + node1.borrow_mut().neighbors.push(node2.clone()); + node2.borrow_mut().neighbors.push(node1.clone()); + node2.borrow_mut().neighbors.push(node3.clone()); } + nodes +} - let node1 = make_node(1); - let node2 = make_node(2); - let node3 = make_node(3); - node1.borrow_mut().neighbors.push(node2.clone()); - node2.borrow_mut().neighbors.push(node1.clone()); - node2.borrow_mut().neighbors.push(node3.clone()); - - nodes.push(node1.clone()); - nodes.push(node2.clone()); - nodes.push(node3.clone()); +fn main () { + let nodes = make_graph(); for n in nodes { println!("node: {}", n.borrow().label); -- cgit v1.2.3