示例代码:
struct S1 {}
struct S2 {}
struct S3 {}
enum State {
Zero,
One(S1),
Two(S1, S2),
Three(S1, S2, S3),
}
struct Client {
state: Option<State>,
}
impl Client {
fn try_advancing(&mut self) {
/* other code */
if let Some(inner) = std::mem::replace(&mut self.state, None) {
match inner {
State::Zero => {
if predicate0() {
self.state = Some(State::One(S1 {}));
}
else {
// code won't compile as we
// no longer own inner after partial move
self.state = Some(inner);
} …Run Code Online (Sandbox Code Playgroud) rust ×1