#[derive(Default)]
struct SomeOptions {
foo: i32,
bar: f32,
}
fn main() {
let options = SomeOptions { foo: 42, ..Default::default() };
}
..
前缀对Default::default()
的返回值有什么影响?为什么这里需要它?它看起来就像是一个扩散运算符,但我不确定。我知道..Default::default()
在做什么--用SomeOptions
的默认值填充剩余的结构参数,但不知道..
是如何工作的。这个操作员的名字是什么?
发布于 2018-01-22 19:49:27
这是struct update syntax。它“需要”的只是有一种简洁的方式将一个结构的所有成员移动/复制到一个新的结构中,可能需要做一些小的修改。
写这段代码的“长”方法是:
let a = SomeOptions::default();
let options = SomeOptions { foo: 42, bar: a.bar };
您确实可以认为它类似于JavaScript的“扩展”运算符,但是Rust的所有权和强类型的细微差别仍然起作用,因此它并没有得到广泛的使用。例如,您不能使用此语法在不同类型的值之间切换。
https://stackoverflow.com/questions/48389072
复制