Rustはクロージャにキャプチャした場合
かつ 元の寿命を超える場合
コンパイラがoutliveだから「move」と明記しなさいと明確化してくれる
下記の例だと「変数」は関数内一時変数からクロージャ随伴変数へ物理移動して延命している

fn foo() -> impl FnMut(&str, i32) -> i32 {
let mut 変数 = 123;
move |cmd, arg| {
match cmd {
"get" => 変数,
"set" => { 変数 = arg; arg },
_ => 0,
}
}
}

fn main() {
let mut x = foo();
println!("get {}", x("get", 0));
println!("set {}", x("set", 456));
println!("get {}", x("get", 0));
}

// 実行結果
// get 123
// set 456
// get 456