Итак, по-видимому, в последних версиях Rust вы не указываете изменчивость внутри struct
, но наследуется от корня. Замечательно. Но мне было интересно, можно ли заставить поле всегда неизменно, даже когда корень изменен.Принудительное неизменяемое поле структуры в Rust
Что-то вроде:
struct A {
immut s: Shape; // immutable by design
bla: Bla; // this field inheriting (im)mutability
}
let mut a = make_a();
a.s = ...; // illegal
Это поможет поддерживать хорошие семантические ограничения в программе, так же, как final
в Java делает (в очень ограниченном объеме).
Кроме того, мы могли себе представить такого род struct
имея некоторые не владеющую ссылку на внутренние неизменные данные, воспользовавшись этой неизменность ...
Ну, если вы сделаете это 'priv' и не изменять его в любом коде внутри того же модуля, что * это * эффективно неизменно. И, конечно, всегда можно заменить 'a' wholesale (' a = make_another_a(); '), что может быть или не быть проблемой. – delnan