Anonymous user
Parametric polymorphism: Difference between revisions
m
→{{header|Rust}}
Line 734:
=={{header|Rust}}==
<lang rust>struct TreeNode<T> {
value: T,▼
▲ value: T,
▲ right: Option<Box<TreeNode<T>>>
}
impl <T> TreeNode<T> {
fn my_map<U>(&self, f: |t: &T| ->
match self.left {
left: match self.left {None => None, Some(ref n) => Some(box n.my_map(|n| f(n)))},▼
None => None,
right: match self.right {None => None, Some(ref n) => Some(box n.my_map(|n| f(n)))}▼
},
match self.right {
None => None,
},}
}
}
fn main() {
let root =
TreeNode{value: 3i,
Some(box() TreeNode{value: 55i,
left: None,
right: None,}),
left:
left: None,
▲ value: 0i,
right:
▲ left: None,
None,}),
▲ right: None
right: None,}),};
▲ right: None
println!("---------------");▼
let new_root = root.my_map(|x| *x as f64 * 333.333f64);▼
▲ println!("---------------");
▲ let new_root = root.my_map(|x| x * 333);
▲ new_root.my_map(|x| {println!("{}", x); *x});
}</lang>
|