> Rust "moves" allocated variables into child scopes, unless you explicitly pass a reference (which is what they call "borrowing"). So, if you have a variable, and pass it to a function the way you normally would in Java, C#, F#, Python, etc., the allocation for that variable is moved/scoped to the called function, and freed when its execution goes out of scope. You can't reference the variable after sending it like that, because it has been "moved" (or "consumed") by that function. To get it to work like you would expect, write the function to expect a reference.
>
> This works for the return values as well. If you return a straight-up value from a function, the runtime moves that to the receiving variable, pulling it up in scope.