【发布时间】:2015-04-10 21:12:56
【问题描述】:
我正在尝试替换可变借用中的值;将其中的一部分移入新值:
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,您的代码实际上可以工作,尽管我显然不知道您是否可以接受这个限制。
标签: rust ownership borrow-checker