I don't think I'd seen that page ... how are you find it (this question excluded)?
This is the question I found:
// Don't modify code in main!
fn main() {
let s1 = String::from("Hello world");
let s2 = take_ownership(s1);
println!("{}", s2);
}
// Only modify the code below!
fn take_ownership(s: String) {
println!("{}", s);
}
As far as I see, there's no ownership issue that I can see, as s2
is simply whatever is returned by take_ownership
which would be straightforwardly owned by s2
throughout main
. Meanwhile s
within take_ownership
is obviously owned within that scope.
I'm thinking you're right and that it's a poorly built exercise. We could speculate on what they were trying to do ... such as trying to print s1
after it has been moved to take_ownership
... but in the end it's a relatively simply bit of code and we'd probably be better off moving on ... unless I'm missing something of course.
If the idea were to print s1
after the take_ownership
call, then that'd require a borrow, which would require modifying both main
and take_ownership
, so who knows?