传递初始化的虚拟和str,以便可以通过函数填充它

问题描述 投票:-3回答:3

我的程序初始化变量“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
3个回答
0
投票

你不需要传递一个引用,你可以在函数外传递局部变量的所有权没问题。如果你绝对需要,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

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


0
投票

在您的示例中,您将返回静态字符串,因此您可以这样做:

fn foo(n: u64) -> &'static str {
    if n == 0 {
        "asdf"
    } else {
        "querty"
    }
}

0
投票

你绝对可以做到这一点,但是你需要传递一个可变引用,也就是你无法改变&str的内容(如果那是你想要做的事情; &str在它自己是不可变的)。你只需要改变m指向另一个&str。这是无效的,因为"asdf""qwerty"'static strs。

fn main() {
    let mut m = "";

    foo(42, &mut m);
    dbg!(m);

    foo(0, &mut m);
    dbg!(m);
}

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

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

© www.soinside.com 2019 - 2024. All rights reserved.