我正在尝试替换可变借用中的一个值;将部分内容移动到新值中:
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
中移出会破坏其完整性。但由于该值立即被丢弃,因此我(而不是编译器)可以保证其安全性。
有没有办法实现这一点?我觉得这是一个不安全代码的工作,但我不确定如何使用。
T
的Copy
,您的代码实际上可以工作,尽管我显然不知道您是否接受这种限制。 - fjh