2026-09-20
parse_count.rs
fn parse_count(input: &str) -> u32 {
// write this: shadow `input` (no `mut`) to trim whitespace, then shadow
// it again to parse the trimmed &str into a u32, defaulting to 0 on
// failure
}
parse_countを実装してください。inputという同じ名前を(mutを使わずに)2回シャドーイングして、まず前後の空白を取り除き、次にそれをu32としてパースすること。パースに失敗したら0とすること。
Reference
fn parse_count(input: &str) -> u32 {
let input = input.trim();
let input: u32 = input.parse().unwrap_or(0);
input
}
再代入は同じ型の値でしか使えず、しかもmutが必要です。ここではinputの型が&strからu32へと変わるので、そもそも再代入では書けません。シャドーイングならmutなしで、しかも型が変わってもそのままletで新しい束縛を作れます。let input = input.trim();で前後の空白を取り除いた&strに置き換え、続くlet input: u32 = input.parse().unwrap_or(0);でそれを数値にパースし直しています。2つのinputは見た目は同じ名前ですが、型も値も別のメモリ上の変数であり、前のinputはもう参照できません。これは参考実装であり、唯一の正解ではありません。