繁体   English   中英

从 Rust 中的 function 返回值的不同方法是什么?

[英]What are the different ways to return a value from a function in Rust?

我遇到了以下两种方式:

#[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));
}

难道只有这两个选项吗?

  1. 在 function 的尾部 position 中有一个不带分号的表达式。

     fn implicit() -> i32 { 1 }

    也可以看看:

  2. 使用return语句。

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

    也可以看看:


    宏可以在其中包含return语句,因此您可能并不总是看到return

     macro_rules: thing { ($val;expr) => {{ if $val { return 42; } }}; } fn macro() -> i32 { thing!(true); 99 }

    也可以看看:

  3. 使用? 在返回实现Try的类型的 function 中。

     fn error() -> Option<i32> { None?; Some(42) }

    也可以看看:

其他案例

根据您对“从函数返回”的确切分类方式,这些可能也适用:

  1. 在异步 function 中使用.await

     async fn sometime() -> i32 { async { 42 }.await; 99 }

    这是一个棘手且不明显的问题,因为编译器重写了 function 以包含 state 机器并实现Future特征。 每个.await都可以返回一个Poll::Pending ,但是 function 的调用者永远不必考虑这一点。

    也可以看看:

  2. 惊慌失措。

     fn bail_out() -> Option<i32> { panic!() }

    在这里,function “返回”,但您通常不会得到值。

    也可以看看:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM