在Rust中,您不需要在
struct
内指定可变性,而是从变量绑定中继承。这很好,但是是否有可能强制一个字段始终不可变,即使根可变?例如,这种假设语法:struct A {
immut s: Shape, // immutable by design
bla: Bla, // this field inheriting (im)mutability
}
let mut a = make_a();
a.s = x/*...*/; // illegal
这将有助于保持程序中良好的语义限制,就像Java中的final
所做的那样(在非常有限的情况下)。
此外,我们可以想象这种类型的struct
具有对内部不可变数据的一些非所有权引用,从而利用这种不可变性...
priv
并且不在同一模块内的任何代码中修改它,那么它就是有效的不可变对象。当然,你也可以整体替换a
(a = make_another_a();
),这可能会带来问题,也可能不会。 - user395760