summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormo8it <mo8it@proton.me>2024-06-26 14:47:57 +0200
committermo8it <mo8it@proton.me>2024-06-26 14:47:57 +0200
commit25b5686dd2ab2e3d5a228a71e9631c50ea50fffe (patch)
treec2557c05375a701e9ebd4b747425c2de8cd0c478
parenta91888e79e69e04e57c2049cdf940a70201e1d6e (diff)
options3 solution
-rw-r--r--exercises/12_options/options3.rs13
-rw-r--r--rustlings-macros/info.toml3
-rw-r--r--solutions/12_options/options3.rs27
3 files changed, 36 insertions, 7 deletions
diff --git a/exercises/12_options/options3.rs b/exercises/12_options/options3.rs
index 5b70a79..4cedb51 100644
--- a/exercises/12_options/options3.rs
+++ b/exercises/12_options/options3.rs
@@ -1,14 +1,17 @@
+#[derive(Debug)]
struct Point {
x: i32,
y: i32,
}
fn main() {
- let y: Option<Point> = Some(Point { x: 100, y: 200 });
+ let optional_point = Some(Point { x: 100, y: 200 });
- match y {
- Some(p) => println!("Co-ordinates are {},{} ", p.x, p.y),
- _ => panic!("no match!"),
+ // TODO: Fix the compiler error by adding something to this match statement.
+ match optional_point {
+ Some(p) => println!("Co-ordinates are {},{}", p.x, p.y),
+ _ => panic!("No match!"),
}
- y; // Fix without deleting this line.
+
+ println!("{optional_point:?}"); // Don't change this line.
}
diff --git a/rustlings-macros/info.toml b/rustlings-macros/info.toml
index 6027b6b..5a47c85 100644
--- a/rustlings-macros/info.toml
+++ b/rustlings-macros/info.toml
@@ -631,7 +631,8 @@ hint = """
The compiler says a partial move happened in the `match` statement. How can
this be avoided? The compiler shows the correction needed.
-After making the correction as suggested by the compiler, do read:
+After making the correction as suggested by the compiler, read the related docs
+page:
https://doc.rust-lang.org/std/keyword.ref.html"""
# ERROR HANDLING
diff --git a/solutions/12_options/options3.rs b/solutions/12_options/options3.rs
index 4e18198..0081eeb 100644
--- a/solutions/12_options/options3.rs
+++ b/solutions/12_options/options3.rs
@@ -1 +1,26 @@
-// Solutions will be available before the stable release. Thank you for testing the beta version 🥰
+#[derive(Debug)]
+struct Point {
+ x: i32,
+ y: i32,
+}
+
+fn main() {
+ let optional_point = Some(Point { x: 100, y: 200 });
+
+ // Solution 1: Matching over the `Option` (not `&Option`) but without moving
+ // out of the `Some` variant.
+ match optional_point {
+ Some(ref p) => println!("Co-ordinates are {},{}", p.x, p.y),
+ // ^^^ added
+ _ => panic!("No match!"),
+ }
+
+ // Solution 2: Matching over a reference (`&Option`) by added `&` before
+ // `optional_point`.
+ match &optional_point {
+ Some(p) => println!("Co-ordinates are {},{}", p.x, p.y),
+ _ => panic!("No match!"),
+ }
+
+ println!("{optional_point:?}");
+}