#[derive(Default)]
struct SomeOptions {
foo: i32,
bar: f32,
}
fn main() {
let options = SomeOptions { foo: 42, ..Default::default() };
}
对..
的返回值执行的Default::default()
前缀是什么?为什么这里有必要?它几乎看起来像是一个传播操作员,但我不确定。我了解..Default::default()
正在做什么 - 使用默认值SomeOptions
填充剩余的struct参数,而不是..
的工作方式。这个运营商的名字是什么?
答案 0 :(得分:10)
这是struct update syntax。仅仅需要一种简洁的方法将结构的所有成员移动/复制到新结构中,这可能需要一些小的修改。
这种“长”的写作方式是:
let a = SomeOptions::default();
let options = SomeOptions { foo: 42, bar: a.bar };
你确实可以认为它类似于JavaScript“spread”运算符,但Rust的所有权和强类型的细微差别仍在发挥作用,因此它没有被广泛使用。例如,您不能使用此语法在不同类型的值之间进行。