作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不知道如何遵循编译器的建议:consider using a let binding to create a longer lived value
。
Playground
#![allow(unused)]
fn main() {
let a_dir=std::env::args().nth(2);
let dir:&str=match a_dir{
Some (ref a)=> &format!("./{}/**/*.liquid",a) as &str,
None=>{"./**/*.liquid"},
};
}
error[E0716]: temporary value dropped while borrowed
--> src/main.rs:6:23
|
5 | let dir:&str=match a_dir{
| --- borrow later stored here
6 | Some (ref a)=> &format!("./{}/**/*.liquid",a) as &str,
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - temporary value is freed at the end of this statement
| |
| creates a temporary which is freed while still in use
|
= note: consider using a `let` binding to create a longer lived value
最佳答案
#![allow(unused)]
fn main() {
let a_dir = std::env::args().nth(2);
let dir: &str = match a_dir {
Some(ref a) => &format!("./{}/**/*.liquid", a) as &str,
None => "./**/*.liquid",
};
}
在您的代码中,在match的
Some
案例中,您正在创建一个拥有的
String
。匹配块末尾将删除该块。
format!("./{}/**/*.liquid", a);
这将产生一个
String
,并且您返回对它的引用。
String
生成的
format!()
实际上已经删除了,因此您试图返回一个悬空引用,因为哪个编译器拒绝了您的代码。
"consider using a let binding to create a longer lived value"
String
并将其存储在某个位置,以便它不会被丢弃,并且能够返回有效的引用。
#![allow(unused)]
fn main() {
let a_dir = std::env::args().nth(2);
let string;
let dir: &str = match a_dir {
Some(ref a) => {
string = format!("./{}/**/*.liquid", a);
&string
},
None => "./**/*.liquid",
};
}
这将创建一个名为
string
的变量,该变量的生命周期将足够长,并将您从
String
生成的
format!()
存储在
string
中。然后,将引用返回给
string
。
String
:
#![allow(unused)]
fn main() {
let a_dir = std::env::args().nth(2);
let dir = a_dir
.as_ref()
.map(|val| format!("./{}/**/*.liquid", val))
.unwrap_or_else(|| "./**/*.liquid".to_string());
}
如果您想要
&str
,则只需执行
dir.as_str()
即可。
关于rust - 借入时暂时值(value)下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64952184/
我对Rust还是很陌生,并且一直在与所有权机制进行斗争。 我想遍历本地目录并将所有单个元素收集到一个结构中。然后将这些结构放入向量中以备后用。因此,基本上我正在尝试构建结构的向量。 结构的前两个字段应
我是一名优秀的程序员,十分优秀!