【问题标题】:How to fix cannot return value referencing function parameter error in Rust如何修复 Rust 中无法返回值引用函数参数错误
【发布时间】:2020-06-07 08:51:06
【问题描述】:

目的是获取调用二进制文件的输出,获取该输出的最后一行,将其拆分,并获取索引 1 处的字符串。

这是尝试:

    let result:Result<String, FromUtf8Error> = String::from_utf8(output.stdout);
    let value = result.map(move |res| {
        res.lines()
            .last()
            .unwrap_or(String::from("").as_ref())
            .split(" ")
            .collect::<Vec<&str>>()[1]
    });

两个问题:

第一个,上面的代码导致编译错误:

57 | /         res.lines()
58 | |             .last()
59 | |             .unwrap_or(String::from("").as_ref())
   | |                        ---------------- temporary value created here
60 | |             .split(" ")
61 | |             .collect::<Vec<&str>>()[1]
   | |______________________________________^ returns a value referencing data owned by the current function

第二个,我意识到value 的类型是Result&lt;&lt;unknown&gt;,FromUtf8Error&gt;,而不是我预期的Result&lt;&lt;String&gt;,FromUtf8Error&gt;

那么如何修复编译错误并获得正确的类型呢?

【问题讨论】:

    标签: rust


    【解决方案1】:

    您正试图返回一个指向 map 闭包拥有的数据的 &amp;str。 和

    一样
    fn does_not_work() -> &str {
        let my_string = String::new();
        &my_string
    }
    

    您需要有一个拥有的值,例如String,才能返回。

    result.map(move |res| {
        String::from(
            res.lines()
            .last()
            .unwrap_or("")
            .split(" ")
            .collect::<Vec<&str>>()[1]
        )
    })
    

    【讨论】:

    • 谢谢!我对使用 move 运算符有很多了解,但没有看到需要创建另一个 String 实例。
    猜你喜欢
    • 1970-01-01
    • 2023-02-25
    • 2021-06-22
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 2011-06-19
    • 1970-01-01
    相关资源
    最近更新 更多