Rust 通过初始化虚拟&;str,这样它就可以由函数填充
我的程序初始化一个变量“mag”,然后将它传递给一个函数,该函数根据int修改它Rust 通过初始化虚拟&;str,这样它就可以由函数填充,rust,Rust,我的程序初始化一个变量“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; } 然而,我得到一个编者的警告,杂志永远不会被
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。有更好的方法吗?您不需要到处传递引用,您可以将局部变量的所有权传递到函数之外,没有问题
String
s如果您确实需要,也可以取消对&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")
}
}
fn main()->std::io::Result{
设n=55;
设x=foo(n);
匹配&x[…]{
“querty”=>println!(“是的,是qwerty!”),
_=>println!(“不,不是qwerty:(”)
};
好(())
}
fn foo(n:u64)->字符串{
如果n==0{
字符串::from(“asdf”)
}否则{
字符串::from(“query”)
}
}
打印“是的,是qwerty!”
游乐场:
根据您的注释进行编辑以包括匹配。在您的示例中,您返回的是静态字符串,因此可以执行以下操作:
fn foo(n: u64) -> &'static str {
if n == 0 {
"asdf"
} else {
"querty"
}
}
你完全可以这样做,但是你需要传递一个可变的引用,而且你也不能改变
&str
的内容(如果这是你想要做的;&str
本身是不可变的)。你只需要改变m
指向另一个&str
。这看起来毫无意义,因为“asdf”和“qwerty”是静态的
fn main(){
让mut m:&str=“”;
foo(42岁及以上);
dbg!(m);
foo(0和m);
dbg!(m);
}
fn-foo(n:u64,m:&mut&str){
如果n==0{
*m=“asdf”;
}否则{
*m=“qwerty”;
}
}
我返回a&str的原因是,我然后根据foo的结果进行匹配。写起来似乎很枯燥。在“asdf”之后写“\u string()”,等等。我应该只写“\u string()”,然后在字符串上进行匹配而不是&str吗?我已经更新了我的答案。基本上,你可以将其切片并与a&str
进行比较。