String を別の変数に代入すると所有権がムーブし、元の変数が使えなくなる、という所有権の最小の例です。コメントを外すと「value borrowed here after move」というエラーになります。「代入はコピーではなく持ち主の交代」という Rust の世界観をまずこの2行で押さえてください。
Rust
fn main() {
let original = String::from("レポート");
let moved = original; // 所有権が original から moved へ移る
println!("moved = {}", moved);
// println!("{}", original); // エラー: original はもう使えない
}
fn build_progress(done_count: i32) -> String {
let mut bar = String::from("進捗: ");
for _step in 1..=done_count {
bar = bar + "■"; // 古い bar をムーブし、連結結果を入れ直す
}
bar + " 完了" // 完成品の所有権を呼び出し元へ返す
}
fn main() {
let progress = build_progress(4);
println!("{}", progress);
}