2026-09-15
status.rs
fn status(code: u16, expected: u16) -> &'static str {
match code {
expected => "ok",
_ => "unexpected",
}
}
codeがexpectedと等しいときだけ"ok"を返すつもりですが、status(500, 200)も"ok"になります。何が問題で、どう直せばよいでしょうか?
Answer
パターンの位置に書いた識別子は、定数・列挙子・ユニット構造体を指していない限り「その場で新しい変数を束縛する」パターンになり、何にでもマッチします。1つ目のアームはexpectedという新しい変数にcodeを束縛するだけで、引数のexpectedとは比較していません。値との比較はガードで書きます:
match code {
c if c == expected => "ok",
_ => "unexpected",
}