2026-08-22
total_len.rs
fn total_len(names: Vec<String>) -> usize {
let mut total = 0;
for name in names {
total += name.len();
}
names.len()
}
これはコンパイルできません。なぜでしょうか?最小限の変更で直してください。
Answer
for name in namesはnames(の所有権)をムーブして消費します(Vec<String>はCopyではないため)。そのためループの後でnames.len()を呼ぼうとすると、すでにムーブ済みの値を借用しようとしてコンパイルエラーになります。for name in &namesとし、namesへの参照だけを借りるようにしてください。