首页 > 解决方案 > 传递初始化的虚拟 &str 以便它可以由函数填充

问题描述

我的程序初始化一个变量“mag”,然后将它传递给一个根据 int 修改它的函数。

let n = some_number;
let m = "";
x = foo(n, m);

fn foo(n: u64, mut m: &str) -> &str {
    if n == 0 {
        m = "asdf";
    } else {
        m = "qwerty";
    return mag;
}

但是,我收到一个编译器警告说永远不会阅读 mag。我无法返回在函数内部创建的变量,所以我必须在外部初始化 mag。有没有更好的方法来做到这一点?

标签: rust

解决方案


您不需要传递引用,您可以在函数外部传递局部变量的所有权没问题。如果您绝对需要,Strings 也可以取消引用:&str

fn main() -> std::io::Result<()> {
    let n = 55;
    let x = foo(n);

    match &x[..] {
        "querty" => println!("Yep it was qwerty!"),
        _ => println!("Nope it wasn't qwerty :(")
    };

    Ok(())
}

fn foo(n: u64) -> String {
    if n == 0 {
        String::from("asdf")
    } else {
        String::from("querty")
    }
}

打印“是的,它是 qwerty!”。

操场:https ://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=d7830c124171ab8a3c64f55a5c89590f

根据您的评论编辑以包括匹配。


推荐阅读