fn return_values_and_scope() {
    let s1 = gives_ownership();         // gives_ownership moves its return
                                        // value into s1

    let s2 = String::from("hello");     // s2 comes into scope

    let s3 = takes_and_gives_back(s2);  // s2 is moved into
                                        // takes_and_gives_back, which also
                                        // moves its return value into s3
}
// Here, some_integer goes out of scope. Nothing special happens.
Here, some_integer goes out of scope. Nothing special happens.
Here some_integer goes out of scope . Nothing special happens .
fn return_values_and_scope() {
    let s1 = gives_ownership();         // gives_ownership moves its return
                                        // value into s1
    let s2 = String::from("hello");     // s2 comes into scope
    let s3 = takes_and_gives_back(s2);  // s2 is moved into
                                        // takes_and_gives_back, which also
                                        // moves its return value into s3
}
fn return_values_and_scope ( ) { let s1 = gives_ownership ( ) ; // gives_ownership moves its return // value into s1 let s2 = String :: from ( " " ) ; // s2 comes into scope let s3 = takes_and_gives_back ( s2 ) ; // s2 is moved into // takes_and_gives_back, which also // moves its return value into s3 }
Here, some_integer goes out of scope.
Here some_integer goes out of scope .