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

时间:2018-01-22 19:39:33

标签: rust default operator-keyword

来自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参数,而不是..的工作方式。这个运营商的名字是什么?

1 个答案:

答案 0 :(得分:10)

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

这种“长”的写作方式是:

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

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