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 val

expression

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 the mut 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()
}