我的程序初始化变量“ 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。有更好的方法吗?
答案 0 :(得分:0)
您不需要传递引用,可以在函数外部传递局部变量的所有权,这没有问题。如果绝对需要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")
}
}
打印“是的,很夸张!”。
根据您的评论进行了编辑,包括匹配项。
答案 1 :(得分:0)
在您的示例中,您将返回静态字符串,因此您可以执行以下操作:
fn foo(n: u64) -> &'static str {
if n == 0 {
"asdf"
} else {
"querty"
}
}
答案 2 :(得分:0)
您绝对可以做到这一点,但是您需要传递一个可变的引用,否则您将无法更改&str
的内容(如果您打算这样做,{{ 1}}本身是不可变的。您只需更改&str
即可指向另一个m
。这似乎很有效,因为&str
和"asdf"
是"qwerty"
'static
s。
str