当前位置: 首页 > 知识库问答 >
问题:

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

胥和悌
2023-03-14

我遇到了以下两种方式:

#[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个答案

越鸿才
2023-03-14

>

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

    fn implicit() -> i32 {
        1
    }
    

    另见:

    • 在Rust中分号是可选的吗

    使用返回语句。

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

    另见:

    • 为什么在函数中使用返回作为最后一条语句被认为是糟糕的风格?
    • 在Rust中使用返回语句和省略分号有什么区别?

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

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

    另见:

    • 如何在“确定”时展开结果或在“错误”时从函数返回
    • 是否有展开或继续循环的快捷方式

    使用<代码>

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

    另见:

    • 这个问号运算符是关于什么的

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

    >

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

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

    另见:

    • Rust中异步/等待的目的是什么

    惊慌失措。

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

    这里,函数“返回”,但通常不会得到值。

    另见:

    • 当使用panic::catch\u unwind时,在Rust中抑制panic输出

  •  类似资料:
    • 本文向大家介绍在js中函数返回多个值有哪些方法?相关面试题,主要包含被问及在js中函数返回多个值有哪些方法?时的应答技巧和注意事项,需要的朋友参考一下 使用数组的方式 2.将数据封装到json里面 3.return取下标 ` <script type="text/javascript"> function getData() { return ["oec2003", 25] } function

    • 我正在等待(从USSD请求中)检索一个值,以便返回它(getUSSD):

    • 如您所见,它将参数和的和保存在变量中,然后将包含它们的和的eax寄存器保存在变量中,就像函数返回值一样。 这样做是因为函数是用返回值定义的吗?

    • 编者按:这个问题中的语法早于Rust 1.0,1.0更新的语法会产生不同的错误,但Rust 1.0中的总体概念仍然相同。 我有一个带有字段的结构T,我想从函数返回该字符串。我不想复制整个字符串,只是指针: 为什么这是错误的?返回

    • 问题内容: 我在从Node.js中的回调函数返回值时遇到了小麻烦,我将尝试尽可能轻松地解释我的情况。考虑一下我有一个片段,它包含URL,并命中该URL,并提供输出: 我试图将其包装在函数中并返回如下值: 因为在我的Node.js代码中,我有很多语句将决定value的值,例如: 关键是a内的所有语句将保持相同,除了的值。因此,绝对需要将这些通用代码放入函数中。我尝试了同样的方法,但是in总是会回报我

    • 问题内容: 我正在尝试编写一个函数(使用WebdriverJS lib),该函数遍历元素列表,检查名称并构建与该名称相对应的xpath定位器。我在这里简化了xpath定位器,所以不用注意。 我在这里面临的问题是:1)调用此函数返回未定义。据我了解,这是因为return语句不在其位置,而是:2)将其放置在同步代码通常可以正常工作的正确位置,不适用于异步承诺,因此调用此函数将返回相同的未定义,但是因为