trait MyOperations { fn my_div(self, den: i64) -> Option; } impl MyOperations for i64 { fn my_div(self, den: i64) -> Option { if den != 0 { Some(self / den) } else { None } } } fn my_sum(a: &Option, b:&Option) -> Option { if let Some(va) = a { if let Some(vb) = b { Some(va + vb) } else { None } } else { None } } fn main() { let a = 6.my_div(3); let b = 8.my_div(2); let c = 6.my_div(0); let r1 = my_sum(&a, &b); let r2 = my_sum(&a, &c); if let Some(v) = r1 { println!("6 / 3 + 8 / 2 = {}", v); } else { println!("6 / 3 + 8 / 2 = None"); } if let Some(v) = r2 { println!("6 / 3 + 6 / 0 = {}", v); } else { println!("6 / 3 + 6 / 0 = None"); } }