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 参数,但不知道..是如何工作的.这个接线员叫什么名字?

推荐答案

这是struct update syntax."需要"的只是用一种简洁的方式将 struct 的所有成员移动/复制到一个新的 struct 中,可能需要一些小的修改.

写这篇文章的"漫长"方式是:

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

你确实可以把它想象成类似于JavaScript"spread"操作符,但Rust在所有权和强类型方面的细微差别仍在发挥作用,因此它没有得到广泛apply.例如,不能使用此语法在不同类型的值之间切换.

Rust相关问答推荐

如何在Rust中为具有多个数据持有者的enum变体编写文档 comments ?

为什么我的梅森素数代码的指数越大,速度就越快?

何时可以在Rust中退出异步操作?

铁 rust 干线无法使用PowerShell获取环境变量

异步函数返回的future 生存期

习语选项<;T>;到选项<;U>;当T->;U用From定义

如何初始化选项<;T>;数组Rust 了?

为什么 GAT、生命周期和异步的这种组合需要 `T: 'static`?

如何重命名 clap_derive 中的子命令占位符?

为什么在 Allocator API 中 allocate() 使用 `[u8]` 而 deallocate 使用 `u8` ?

从字节数组转换为字节元组和字节数组时,为什么 Transmute 会对字节重新排序?

仅发布工作区的二进制 crate

一旦令牌作为文字使用,声明宏不匹配硬编码值?

如何使用 Rust Governor 为每 10 秒 10 个请求创建一个 RateLimiter?

从光标位置旋转精灵

如何刷新 TcpStream

如何在 Rust 中将 UTF-8 十六进制值转换为 char?

为什么 match 语句对引用类型比函数参数更挑剔?

HashMap entry() 方法使borrow 的时间比预期的长

A 有一个函数,它在 Option<> 类型中时无法编译,但在 Option<> 类型之外会自行编译.为什么?