为什么结构更新语法不适用于非穷举结构?

wis*_*sha 2 rust

在结构更新语法中,“扩展”结构必须与生成的结构具有相同的类型。因此,扩展结构必须已经包含所有字段。

那么,还剩下什么没有“用尽”呢?为什么非穷举结构不允许使用结构更新语法?

use some_crate::NonExhaustiveStruct;

let a = NonExhaustiveStruct::default();

let b = {
    some_field: true,
    ..a //Why doesn't this work?
};
Run Code Online (Sandbox Code Playgroud)

use*_*198 5

这是目前明确不受支持的边缘情况:https : //rust-lang.github.io/rfcs/2008-non-exhaustive.html#functional-record-updates。在同一个 crate 结构中,非穷举结构允许使用更新语法,但当该结构在单独的 crate 中定义时则不允许。

这样做的原因是将来可能会添加一个私有字段,并且 crate 之外的代码无法对具有私有字段的结构进行传播更新。