结论:Rust 允许按字段移出结构体的所有权——移出某个字段后,该字段失效、其余字段仍可使用,但整个结构体不能再作为整体使用(若字段类型是 Copy,则是复制而非移动,不存在部分移动)。

展开:部分移动常见于解构消费结构体的场景。限制有两条:①实现了 Drop 的结构体不允许部分移动,否则析构时无法处理已被移走的字段;②从借用(&s)中不能直接移出字段,只能借字段、复制 Copy 字段或 clone。易错点:部分移动后给该字段重新赋值可以"修复"结构体,使其恢复完整可用;元组和枚举变体同样适用此规则。工程建议:拆分大结构体时优先用解构 let Foo { a, b } = foo; 一次性表达,比逐字段移动清晰。追问方向:mem::takeOption::take 与部分移动什么关系?它们用默认值替换原值、取出所有权,是"可恢复的部分移动"的常用封装。

struct User { name: String, age: u8 }
let u = User { name: "A".into(), age: 30 };
let name = u.name;      // 部分移动:name 字段被移出
println!("{}", u.age);  // OK:age 仍可用
// println!("{:?}", u); // 错误:u 已不完整