Parametric polymorphism: Difference between revisions

→‎{{header|Rust}}: Updated to the Rust 1.3.0
(→‎{{header|Rust}}: Updated to the Rust 1.3.0)
Line 786:
 
impl <T> TreeNode<T> {
fn my_map<U,F>(&self, f: |t: &T| -> UF) -> TreeNode<U> {where
TreeNode{value F: fFn(&self.valueT), -> U {
TreeNode left:{
value: match f(&self.left {value),
left: match self.left None => None,{
Some(ref n)None => Some(box() n.my_map(|n| f(n)))None,
Some(ref n) => }Some(Box::new(n.my_map(f))),
right:},
right: match self.right {
None => None,
Some(ref n) => Some(boxBox::new() n.my_map(|n| f(n))),
},}
}
}
}
 
fn main() {
let root = TreeNode {
TreeNode{value: 3i3,
left: Some(Box::new(TreeNode left:{
Some(box() TreeNode{value: 55i55,
left: None,
right: None,}),
right:})),
right: Some(boxBox::new()TreeNode TreeNode{value: 234i,
value: left:234,
left: Some(boxBox::new()TreeNode TreeNode{value: 0i,
leftvalue: None0,
left: right:None,
right: None,}),
right: None,})),};
right: None,
root.my_map(|x| { println!("{}" , x)});
})),
};
root.my_map(&|x| { println!("{}" , x)});
println!("---------------");
let new_root = root.my_map(&|x| *x as f64 * 333.333f64);
new_root.my_map(&|x| { println!("{}" , x) });
}</lang>