Rust 中结构文字中的“..”语法是什么?

What is the ".." syntax inside a struct literal in Rust?

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

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

fn main() {
    let options = SomeOptions { foo: 42, ..Default::default() };
}

.. 前缀对 Default::default() 的返回值有什么作用,为什么这里需要它?它几乎看起来就像是一个传播运营商,但我不确定。我明白 ..Default::default() 在做什么——用默认值 SomeOptions 填充剩余的结构参数,但不知道 .. 是如何工作的。这个操作员叫什么名字?

这是struct update syntax。 "needed" 只是有一种简洁的方法将结构的所有成员移动/复制到新结构,可能需要进行一些小的修改。

"long" 的写法是:

let a = SomeOptions::default();
let options = SomeOptions { foo: 42, bar: a.bar };

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