breayhing fa7e4f8ade 🐛 fix bugs
2024-07-11 22:02:46 +08:00

41 lines
1.5 KiB
Rust

#[derive(Debug)]
struct Point {
x: i32,
y: i32,
}
fn main() {
let optional_point = Some(Point { x: 100, y: 200 });
// Exercise 1: Use ok_or to convert optional_point to a Result.
// If the point exists, print its coordinates.
// If it doesn't, print the error message "Point does not exist".
let result_point = optional_point.clone().ok_or("Point does not exist");
match result_point {
Ok(p) => println!("Co-ordinates are {},{}", p.x, p.y),
Err(e) => println!("{}", e),
}
// Exercise 2: Use ok_or_else to achieve the same functionality as above,
// but with a closure to generate the error message.
let result_point_else = optional_point.clone().ok_or_else(|| "Point does not exist");
match result_point_else {
Ok(p) => println!("Co-ordinates are {},{}", p.x, p.y),
Err(e) => println!("{}", e),
}
// Exercise 3: Use and_then to chain operations on optional_point.
// If the point exists, compute the distance from the origin and return it as an Option.
// If it doesn't, return None.
let distance_from_origin = optional_point.clone().and_then(|p| {
let distance = ((p.x.pow(2) + p.y.pow(2)) as f64).sqrt();
Some(distance)
});
match distance_from_origin {
Some(distance) => println!("Distance from origin is {:.2}", distance),
None => println!("No point to calculate distance"),
}
println!("{optional_point:?}"); // Don't change this line.
}