Skip to content

Commit

Permalink
chore: Refactored to adhere to new rustlings version
Browse files Browse the repository at this point in the history
  • Loading branch information
rikettsie committed Sep 29, 2024
1 parent 1c27aee commit d83ee30
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 19 deletions.
4 changes: 4 additions & 0 deletions dev/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ bin = [
{ name = "functions4_sol", path = "../solutions/02_functions/functions4.rs" },
{ name = "functions5", path = "../exercises/02_functions/functions5.rs" },
{ name = "functions5_sol", path = "../solutions/02_functions/functions5.rs" },
{ name = "functions6", path = "../exercises/02_functions/functions6.rs" },
{ name = "functions6_sol", path = "../solutions/02_functions/functions6.rs" },
{ name = "if1", path = "../exercises/03_if/if1.rs" },
{ name = "if1_sol", path = "../solutions/03_if/if1.rs" },
{ name = "if2", path = "../exercises/03_if/if2.rs" },
Expand Down Expand Up @@ -60,6 +62,8 @@ bin = [
{ name = "move_semantics4_sol", path = "../solutions/06_move_semantics/move_semantics4.rs" },
{ name = "move_semantics5", path = "../exercises/06_move_semantics/move_semantics5.rs" },
{ name = "move_semantics5_sol", path = "../solutions/06_move_semantics/move_semantics5.rs" },
{ name = "move_semantics6", path = "../exercises/06_move_semantics/move_semantics6.rs" },
{ name = "move_semantics6_sol", path = "../solutions/06_move_semantics/move_semantics6.rs" },
{ name = "structs1", path = "../exercises/07_structs/structs1.rs" },
{ name = "structs1_sol", path = "../solutions/07_structs/structs1.rs" },
{ name = "structs2", path = "../exercises/07_structs/structs2.rs" },
Expand Down
5 changes: 2 additions & 3 deletions exercises/02_functions/functions6.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,12 @@
// Execute `rustlings hint functions6` or use the `hint` watch subcommand for
// some hints.

// I AM NOT DONE

fn main() {
// TODO: ensure the definition of captured variable
let closure_1 = |input_var: u32| -> u32 {input_var + outer_var};
println!("Closure#1 returns {}", closure_1(5));

let closure_2 = |input_var| println!("Closure#2 (input_var {})", input_var);
closure_2(2);
closure_2("5");
closure_2("5"); // TODO: look at the captured variable type here
}
6 changes: 2 additions & 4 deletions exercises/06_move_semantics/move_semantics6.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,16 @@
// Execute `rustlings hint move_semantics7` or use the `hint` watch subcommand
// for a hint.

// I AM NOT DONE

fn main() {
let mut counter = 0;

let mut increment = || {
counter += 1;
println!("counter: {}", counter);
println!("counter equals {}", counter);
};

increment();
let _reborrowed_counter = &counter;
let _reborrowed_counter = &counter; // TODO: figure out where to put this borrowing instruction
increment();

assert_eq!(counter, 2);
Expand Down
21 changes: 9 additions & 12 deletions rustlings-macros/info.toml
Original file line number Diff line number Diff line change
Expand Up @@ -189,8 +189,8 @@ There are two solutions:

[[exercises]]
name = "functions6"
path = "exercises/02_functions/functions6.rs"
mode = "compile"
dir = "02_functions"
test = false
hint = """
Hint FIX #1: Closures can capture variables defined in the outer context.
Expand All @@ -199,8 +199,7 @@ specified in the signature. But the closure cannot be reused with different
input types.
Read more about closures in the rust book dedicated section:
https://doc.rust-lang.org/book/ch13-01-closures.html
"""
https://doc.rust-lang.org/book/ch13-01-closures.html"""

# IF

Expand Down Expand Up @@ -408,17 +407,15 @@ to be adjusted."""

[[exercises]]
name = "move_semantics6"
path = "exercises/06_move_semantics/move_semantics6.rs"
mode = "compile"
dir = "06_move_semantics"
test = false
hint = """
When a closure capture a variable to modify it, it borrows that variable as a
mutable reference. In this exercise, as the closure mutably borrows `counter`
and is called later, any attempt to reborrow `counter` in between will lead to
an error.
When a closure captures a variable to modify it, it actually borrows that variable
as a mutable reference. In this exercise, the closure mutably borrows the `counter`
variable, thus, any attempt to borrow `counter` between closure calls leads to an error.
You cannot immutably borrow a variable if a mutable closure is
called later in the scope.
"""
called later in the scope."""

# STRUCTS

Expand Down
9 changes: 9 additions & 0 deletions solutions/02_functions/functions6.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
fn main() {
let outer_var = 1;
let closure_1 = |input_var: u32| -> u32 {input_var + outer_var};
println!("Closure#1 returns {}", closure_1(5));

let closure_2 = |input_var| println!("Closure#2 (input_var {})", input_var);
closure_2(2);
closure_2(5);
}
14 changes: 14 additions & 0 deletions solutions/06_move_semantics/move_semantics6.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
fn main() {
let mut counter = 0;

let mut increment = || {
counter += 1;
println!("counter equals {}", counter);
};

increment();
increment();
let _reborrowed_counter = &counter;

assert_eq!(counter, 2);
}

0 comments on commit d83ee30

Please sign in to comment.