Rust functions: Difference between revisions
From wikinotes
Line 60: | Line 60: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
</blockquote><!-- Return Values --> | </blockquote><!-- Return Values --> | ||
== References == | |||
<blockquote> | |||
References let you pass an argument to a function without transferring ownership.<br> | |||
By default, references are not mutable, but the <code>mut</code> keyword makes it so. | |||
<syntaxhighlight lang="rust"> | |||
// pass reference to string | |||
fn len(s: &String) -> usize { | |||
s.len() | |||
} | |||
// if mutable, '&' placed before the keyword | |||
fn len(s: &mut str) -> usize { | |||
s.len() | |||
} | |||
</syntaxhighlight> | |||
</blockquote><!-- References --> | |||
</blockquote><!-- Function Signatures --> | </blockquote><!-- Function Signatures --> |
Revision as of 17:16, 7 February 2023
Expressions vs Statements
- statements include actions without a return value (ends in ;)
- expressions include actions with a return value (no ;)
statement
{ let y = 1; y += 1; } // no return valexpression
let x = { let y = 1; y += 1 // <-- no semicolon } // returns 2
Function Signatures
Params
fn main(num: u8) { println!("{}", num); }Return Values
// return void fn foo() { println!("hi"); } // single return value fn foo() -> i32 { 123 // <-- return value (no semicolon) } // multiple return values fn foo() -> (i32, String) { (123, String::from("abc")) }Notes that rust supports unpacking multiple variables.
fn foo() -> (i32, String) { (123, String::from("abc")) } let (mynum, mystr) = foo();References
References let you pass an argument to a function without transferring ownership.
By default, references are not mutable, but themut
keyword makes it so.// pass reference to string fn len(s: &String) -> usize { s.len() } // if mutable, '&' placed before the keyword fn len(s: &mut str) -> usize { s.len() }