在Rust中重用变量

沙尚卡

我有以下代码:

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具有type std::string::String,它没有实现Copy特征

我了解在Rust中,赋值时会四处移动。我想声明一个变量,并在第二个代码块中多次使用它。我该怎么做呢?

艾萨克·范·巴克尔(Isaac van Bakel)

我想声明一个变量,并在第二个代码块中多次使用它。我该怎么做呢?

您没有,因为“在分配时,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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章