Namaran

Code daily. Without assist.

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はもう参照できません。これは参考実装であり、唯一の正解ではありません。