rust - 传递初始化的虚拟 &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。有没有更好的方法来做到这一点?
解决方案
您不需要传递引用,您可以在函数外部传递局部变量的所有权没问题。如果您绝对需要,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")
}
}
打印“是的,它是 qwerty!”。
根据您的评论编辑以包括匹配。
推荐阅读
- azure-devops - 如何将 jmeter 脚本与 azure devops 管道集成
- sql - 添加多个 LIKE 参数不会产生任何结果
- cypress - 我如何在柏树中单击鼠标
- radio-button - 无法根据单选按钮输入切换选择屏幕
- php - 如何在 url codeigniter 中显示检查的过滤器变量值
- scala - 如何从 CSV 文件转换为 scala toList?
- python - 如何使用另一个列表从列表中选择元素?
- android - 单击微调器选项时在地图上放置一个标记 Android Studio
- azure - 保护 Azure 中的微服务使用的资源连接数据/字符串
- angular - 在 Angular、Material 和 Flex-Layout 上以 mat-progress-spinner 为中心的叠加文本