変更可能な借用の値を置き換えようとしています。その一部を新しい値に移動します。
enum Foo<T> {
Bar(T),
Baz(T),
}
impl<T> Foo<T> {
fn switch(&mut self) {
*self = match self {
&mut Foo::Bar(val) => Foo::Baz(val),
&mut Foo::Baz(val) => Foo::Bar(val),
}
}
}
上記のコードは機能しません。当然のことながら、値を から移動すると、self
その整合性が損なわれます。しかし、その値はその後すぐに削除されるため、(コンパイラではないにしても) その安全性を保証できます。
これを達成する方法はありますか?これは安全でないコードの仕事のように感じますが、それがどのように機能するかはわかりません。