summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSateesh <sateeshkumarb@yahoo.com>2021-05-17 17:40:40 +0530
committerGitHub <noreply@github.com>2021-05-17 14:10:40 +0200
commit399ab328d8d407265c09563aa4ef4534b2503ff2 (patch)
treec6a2d9cfc457bc33f41517b943564f101d2ac019
parent809ec2ce01d5bc9ee0f7eae21bc9276083c8287c (diff)
feat: Add move_semantics5 exercise. (#746)
* feat: Add move_semantics5 exercise. * feat: Add option3 exercise * Address review comments. Fix typos, sentence formatting. * Remove unwanted newline. * Address review comments: make comment inline, fix format in print.
-rw-r--r--exercises/move_semantics/move_semantics5.rs14
-rw-r--r--exercises/option/option3.rs19
-rw-r--r--info.toml21
3 files changed, 54 insertions, 0 deletions
diff --git a/exercises/move_semantics/move_semantics5.rs b/exercises/move_semantics/move_semantics5.rs
new file mode 100644
index 0000000..4f8128c
--- /dev/null
+++ b/exercises/move_semantics/move_semantics5.rs
@@ -0,0 +1,14 @@
+// move_semantics5.rs
+// Make me compile without adding any newlines or removing any of the lines.
+// Execute `rustlings hint move_semantics5` for hints :)
+
+// I AM NOT DONE
+
+fn main() {
+ let mut x = 100;
+ let y = &mut x;
+ let z = &mut *y;
+ *y += 100;
+ *z += 1000;
+ assert_eq!(x, 1200);
+}
diff --git a/exercises/option/option3.rs b/exercises/option/option3.rs
new file mode 100644
index 0000000..045d2ac
--- /dev/null
+++ b/exercises/option/option3.rs
@@ -0,0 +1,19 @@
+// option3.rs
+// Make me compile! Execute `rustlings hint option3` for hints
+
+// I AM NOT DONE
+
+struct Point {
+ x: i32,
+ y: i32,
+}
+
+fn main() {
+ let y: Option<Point> = Some(Point { x: 100, y: 200 });
+
+ match y {
+ Some(p) => println!("Co-ordinates are {},{} ", p.x, p.y),
+ _ => println!("no match"),
+ }
+ y; // Fix without deleting this line.
+}
diff --git a/info.toml b/info.toml
index 0535a77..0e9f428 100644
--- a/info.toml
+++ b/info.toml
@@ -210,6 +210,17 @@ So the end goal is to:
- since we're not creating a new vec in `main` anymore, we need to create
a new vec in `fill_vec`, similarly to the way we did in `main`"""
+[[exercises]]
+name = "move_semantics5"
+path = "exercises/move_semantics/move_semantics5.rs"
+mode = "compile"
+hint = """
+Carefully reason about the range in which each mutable reference is in
+vogue. Does updating the value of referrent (x) immediately after the
+mutable reference is taken helps? Read more about 'Mutable Referenes'
+in the book's section References and Borrowing':
+https://doc.rust-lang.org/book/ch04-02-references-and-borrowing.html#mutable-references."""
+
# PRIMITIVE TYPES
[[exercises]]
@@ -579,6 +590,16 @@ Also see Option::flatten
"""
[[exercises]]
+name = "option3"
+path = "exercises/option/option3.rs"
+mode = "compile"
+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: https://doc.rust-lang.org/std/keyword.ref.html"""
+
+[[exercises]]
name = "result1"
path = "exercises/error_handling/result1.rs"
mode = "test"