Skip to content

Commit

Permalink
feat: Add move_semantics6.rs exercise (#908)
Browse files Browse the repository at this point in the history
  • Loading branch information
Kallu-A committed Mar 29, 2022
1 parent c80ad08 commit 3f0e130
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 0 deletions.
25 changes: 25 additions & 0 deletions exercises/move_semantics/move_semantics6.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// move_semantics6.rs
// Make me compile! `rustlings hint move_semantics6` for hints
// You can't change anything except adding or removing references

// I AM NOT DONE

fn main() {
let data = "Rust is great!".to_string();

get_char(data);

string_uppercase(&data);
}

// Should not take ownership
fn get_char(data: String) -> char {
data.chars().last().unwrap()
}

// Should take ownership
fn string_uppercase(mut data: &String) {
data = &data.to_uppercase();

println!("{}", data);
}
15 changes: 15 additions & 0 deletions info.toml
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,21 @@ in the book's section References and Borrowing':
https://doc.rust-lang.org/book/ch04-02-references-and-borrowing.html#mutable-references.
"""

[[exercises]]
name = "move_semantics6"
path = "exercises/move_semantics/move_semantics6.rs"
mode = "compile"
hint = """
To find the answer, you can consult the book section "References and Borrowing":
https://doc.rust-lang.org/stable/book/ch04-02-references-and-borrowing.html
The first problem is that `get_char` is taking ownership of the string.
So `data` is moved and can't be used for `string_uppercase`
`data` is moved to `get_char` first, meaning that `string_uppercase` cannot manipulate the data.
Once you've fixed that, `string_uppercase`'s function signature will also need to be adjusted.
Can you figure out how?
Another hint: it has to do with the `&` character."""

# PRIMITIVE TYPES

[[exercises]]
Expand Down

0 comments on commit 3f0e130

Please sign in to comment.