Function 从Rust中的函数返回值的不同方式有哪些?

Function 从Rust中的函数返回值的不同方式有哪些?,function,rust,return,Function,Rust,Return,我遇到了以下两种情况: #[derive(Debug)] struct InputList(i32, i32, i32, i32); #[derive(Debug)] struct OutputList(i32, i32, i32, i32); // Option 1 fn foo(input_list: InputList) -> OutputList { return OutputList(input_list.0, input_list.1, input_list.2, i

我遇到了以下两种情况:

#[derive(Debug)]
struct InputList(i32, i32, i32, i32);
#[derive(Debug)]
struct OutputList(i32, i32, i32, i32);

// Option 1
fn foo(input_list: InputList) -> OutputList {
    return OutputList(input_list.0, input_list.1, input_list.2, input_list.3);
}

// Option 2
fn bar(input_list: InputList) -> OutputList {
    OutputList(input_list.0, input_list.1, input_list.2, input_list.3)
}

fn main() {
    let input_list1 = InputList(1, 2, 3, 4);
    let input_list2 = InputList(6, 7, 8, 9);

    println!("foo() invocation output: {:?}", foo(input_list1));
    println!("bar() invocation output: {:?}", bar(input_list2));
}
这是唯一的两个选择吗

在函数的尾部位置有一个不带分号的表达式

fn implicit() -> i32 {
    1
}
async fn sometime() -> i32 {
    async { 42 }.await;
    99
}
另见:

使用return语句

fn explicit() -> i32 {
    return 1;
}
另见:

宏中可以包含return语句,因此您可能不会总是看到返回

另见:

使用?在返回实现Try的类型的函数中

这是一个棘手且不明显的问题,因为编译器重写函数以包含状态机并实现未来特性。each.wait可以返回一个,但函数的调用方永远不必考虑这个问题

另见:

惊慌失措

fn bail_out() -> Option<i32> {
    panic!()
}
在这里,函数返回,但通常不会得到值

另见:

async fn sometime() -> i32 {
    async { 42 }.await;
    99
}
fn bail_out() -> Option<i32> {
    panic!()
}