我的程序初始化一个变量“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。有更好的方法吗?
最佳答案
您不需要四处传递引用,您可以毫无问题地在函数外部传递局部变量的所有权。 String
也可以解引用为 &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!”。
Playground :https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=d7830c124171ab8a3c64f55a5c89590f
根据您的评论进行了编辑以包含匹配项。
关于rust - 传递初始化的虚拟 &str 以便它可以由函数填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55931018/