Expand description

Return a value from a function.

A return marks the end of an execution path in a function:

fn foo() -> i32 {
    return 3;
}
assert_eq!(foo(), 3);
Run

return is not needed when the returned value is the last expression in the function. In this case the ; is omitted:

fn foo() -> i32 {
    3
}
assert_eq!(foo(), 3);
Run

return returns from the function immediately (an “early return”):

use std::fs::File;
use std::io::{Error, ErrorKind, Read, Result};

fn main() -> Result<()> {
    let mut file = match File::open("foo.txt") {
        Ok(f) => f,
        Err(e) => return Err(e),
    };

    let mut contents = String::new();
    let size = match file.read_to_string(&mut contents) {
        Ok(s) => s,
        Err(e) => return Err(e),
    };

    if contents.contains("impossible!") {
        return Err(Error::new(ErrorKind::Other, "oh no!"));
    }

    if size > 9000 {
        return Err(Error::new(ErrorKind::Other, "over 9000!"));
    }

    assert_eq!(contents, "Hello, world!");
    Ok(())
}
Run