我有一个 struct :

struct ThreeDPoint {
    x: f32,
    y: f32,
    z: f32
}

在实例化之后,我想对三个属性中的extract two个进行分析:

let point: ThreeDPoint = ThreeDPoint { x: 0.3, y: 0.4, z: 0.5 };
let ThreeDPoint { x: my_x, y: my_y } = point;

编译器抛出以下错误:

error[E0027]: pattern does not mention field `z`
  --> src/structures.rs:44:9
   |
44 |     let ThreeDPoint { x: my_x, y: my_y } = point;
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing field `z`

在JavaScript(ES6)中,等效的解构如下所示:

let { x: my_x, y: my_y } = point;

推荐答案

..作为struct或元组模式中的一个字段,表示"以及其他":

let ThreeDPoint { x: my_x, y: my_y, .. } = point;

the Rust Book页中有更多关于这方面的内容.

Rust相关问答推荐

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

如何在Rust中表示仅具有特定大小的数组

为什么Rust函数的移植速度比C++慢2倍?

Gtk4-rs:将监视器作为gdk::monitor获取,而不是作为glib::对象获取

是否可以使用Rust宏来构建元组的项?

告诉Rust编译器返回值不包含构造函数中提供的引用

无法实现整型类型的泛型FN

如何实现Deref;多次;?

Rust FFI 和 CUDA C 性能差异

Rust 如何返回大类型(优化前)?

decltype、dyn、impl traits,重构时如何声明函数的返回类型

为什么不能在 Rust 中声明静态或常量 std::path::Path 对象?

为什么要这样编译?

当我不满足特征界限时会发生什么?

编写 TOML 文件以反序列化为 struct 中的枚举

如何创建动态创建值并向它们返回borrow 的工厂?

为什么 Rust 标准库同时为 Thing 和 &Thing 实现特征?

在传输不可复制的值时实现就地枚举修改

基于名称是否存在的条件编译

为什么我不能将元素写入 Rust 数组中移动的位置,但我可以在元组中完成