Skip to content

Commit

Permalink
feat: Add move_semantics5 exercise. (#746)
Browse files Browse the repository at this point in the history
* 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.
  • Loading branch information
sateeshkumarb authored May 17, 2021
1 parent 809ec2c commit 399ab32
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 0 deletions.
14 changes: 14 additions & 0 deletions exercises/move_semantics/move_semantics5.rs
Original file line number Diff line number Diff line change
@@ -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);
}
19 changes: 19 additions & 0 deletions exercises/option/option3.rs
Original file line number Diff line number Diff line change
@@ -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.
}
21 changes: 21 additions & 0 deletions info.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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]]
Expand Down Expand Up @@ -578,6 +589,16 @@ For example: Some(Some(variable)) = variable2
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"
Expand Down

0 comments on commit 399ab32

Please sign in to comment.