我正在尝试替换可变借用中的值;将其中的一部分移入新值:
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
破坏它的完整性。但由于该值在之后立即被删除,我(如果不是编译器)可以保证它的安全性。
有没有办法做到这一点?我觉得这是不安全代码的工作,但我不确定它是如何工作的。