如何复制 String 或 str
How can I copy String or str
我有以下代码:
let mut dirs = vec![String::from(".")];
// This one doesn't work too:
//let mut dirs = vec!["."];
while dirs.len() > 0 {
let paths = fs::read_dir(dirs.pop().unwrap()).unwrap();
for path in paths {
if path.unwrap().metadata().unwrap().is_dir() {
dirs.push(String::from(path.unwrap().path().to_str().unwrap()).clone())
// This one doesn't work too:
//dirs.push(path.unwrap().path().to_str().unwrap())
}
}
}
总是报编译错误:use of moved value: 'path' [E0382]
.
我尝试了不同的方法,但仍然不明白如何复制一个字符串 path.to_str()
以便它比 path
变量存活得更久。看起来 String
和 str
都不支持 Copy
特征。
所以主要问题是如何使上面的代码工作?
我需要以某种方式复制一个字符串。在 C 中,我会使用 memcpy
或 strcpy
来完成该任务。 Rust 中有类似的函数吗?
对 unwrap()
的调用将移动您的 path
对象。最简单的方法是在循环开始时通过说
移动它一次
let path = path.unwrap();
然后使用展开的路径对象:
let mut dirs = vec![String::from(".")];
while dirs.len() > 0 {
let paths = fs::read_dir(dirs.pop().unwrap()).unwrap();
for path in paths {
let path = path.unwrap();
if path.metadata().unwrap().is_dir() {
dirs.push(String::from(path.path().to_str().unwrap()))
}
}
}
我有以下代码:
let mut dirs = vec![String::from(".")];
// This one doesn't work too:
//let mut dirs = vec!["."];
while dirs.len() > 0 {
let paths = fs::read_dir(dirs.pop().unwrap()).unwrap();
for path in paths {
if path.unwrap().metadata().unwrap().is_dir() {
dirs.push(String::from(path.unwrap().path().to_str().unwrap()).clone())
// This one doesn't work too:
//dirs.push(path.unwrap().path().to_str().unwrap())
}
}
}
总是报编译错误:use of moved value: 'path' [E0382]
.
我尝试了不同的方法,但仍然不明白如何复制一个字符串 path.to_str()
以便它比 path
变量存活得更久。看起来 String
和 str
都不支持 Copy
特征。
所以主要问题是如何使上面的代码工作?
我需要以某种方式复制一个字符串。在 C 中,我会使用 memcpy
或 strcpy
来完成该任务。 Rust 中有类似的函数吗?
对 unwrap()
的调用将移动您的 path
对象。最简单的方法是在循环开始时通过说
let path = path.unwrap();
然后使用展开的路径对象:
let mut dirs = vec![String::from(".")];
while dirs.len() > 0 {
let paths = fs::read_dir(dirs.pop().unwrap()).unwrap();
for path in paths {
let path = path.unwrap();
if path.metadata().unwrap().is_dir() {
dirs.push(String::from(path.path().to_str().unwrap()))
}
}
}