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 的所有权和强类型的细微差别仍然发挥作用,因此它没有被广泛使用。例如,您不能使用此语法在不同类型的值之间切换。
来自 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 的所有权和强类型的细微差别仍然发挥作用,因此它没有被广泛使用。例如,您不能使用此语法在不同类型的值之间切换。