feat: Add move_semantics6.rs exercise (#908)
This commit is contained in:
parent
c80ad089fd
commit
3f0e1303e0
25
exercises/move_semantics/move_semantics6.rs
Normal file
25
exercises/move_semantics/move_semantics6.rs
Normal file
@ -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
info.toml
15
info.toml
@ -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]]
|
||||
|
Reference in New Issue
Block a user