Rust中struct结构文字中的".."语法是什么?

Eva*_*ose 7 default operator-keyword rust

来自std::default::Default文档:

#[derive(Default)]
struct SomeOptions {
    foo: i32,
    bar: f32,
}

fn main() {
    let options = SomeOptions { foo: 42, ..Default::default() };
}
Run Code Online (Sandbox Code Playgroud)

..返回值的前缀Default::default()是什么?为什么这里需要它?它几乎看起来像是一个传播运营商,但我不确定.我理解..Default::default()正在做什么 - 用默认值填充剩余的struct参数SomeOptions,但不是如何..工作.这个运营商的名字是什么?

She*_*ter 11

这是struct update语法.仅仅需要一种简洁的方式将结构的所有成员移动/复制到新结构中,这可能需要一些小的修改.

这种"长"的写作方式是:

let a = SomeOptions::default();
let options = SomeOptions { foo: 42, bar: a.bar };
Run Code Online (Sandbox Code Playgroud)

您确实可以认为它类似于JavaScript"spread"运算符,但Rust的所有权和强类型的细微差别仍在发挥作用,因此它并没有被广泛使用.例如,您不能使用此语法在不同类型的值之间进行.

  • @Shabgard,你在真正的 Rust 代码中没有看到这一点,因为它是[无效的 Rust 语法](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=c24d69bf55b4e8d9ffe777cc7ba9034a)。如果您的意思是“let SomeOptions { foo, .. } =”,那么[用 .. 忽略值的剩余部分](https://doc.rust-lang.org/book/ch18-03-pattern-syntax. html#忽略值的剩余部分与-) (3认同)