我有以下代码:
let display_value = entry.path().display();
files_and_dirs.push(DiskEntry {
path: display_value.to_string(),
is_dir: is_dir(display_value.to_string()),
name: display_value.to_string()
});
如果我这样写:
let display_value = entry.path().display();
let dir_name = display_value.to_string();
files_and_dirs.push(DiskEntry {
path: dir_name,
is_dir: is_dir(dir_name),
name: dir_name
});
我收到以下错误:
之所以发生移动是因为
dir_name
具有typestd::string::String
,它没有实现Copy
特征
我了解在Rust中,赋值时会四处移动。我想声明一个变量,并在第二个代码块中多次使用它。我该怎么做呢?
我想声明一个变量,并在第二个代码块中多次使用它。我该怎么做呢?
您没有,因为“在分配时,Rust中的值会移动”。编译器不会自动复制大多数类型的值,因为尚不清楚何时可以这样做,并且会带来程序员可能需要避免的开销。
如果要Clone
多次使用变量的值-只需克隆它即可。
如果要避免重复自己,可以使用闭包为计算命名。
let display_value = entry.path().display();
let dir_name = || display_value.to_string();
files_and_dirs.push(DiskEntry {
path: dir_name(),
is_dir: is_dir(dir_name()),
name: dir_name()
});
这不允许您多次使用该值-每次调用都会产生一个新值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句