2026-09-15
parse_port.rs
fn port(value: Option<&str>) -> Option<u16> {
// write this: Some(port) only if value is Some,
// parses as a u16, and is not 0; otherwise None
}
portを、入れ子にしないifを1つだけ使って書いてください。matchと?は使わないこと。
Reference
fn port(value: Option<&str>) -> Option<u16> {
if let Some(s) = value
&& let Ok(p) = s.parse::<u16>()
&& p != 0
{
Some(p)
} else {
None
}
}
Rust 2024 editionでは、ifの条件でletパターンと普通のbool式を&&でつなげます(let chains)。前のletで束縛したsやpを後ろの条件でそのまま使え、どこかで失敗すればelseへ進みます。2021 edition以前ではコンパイルエラーになり、if letを入れ子にするしかありませんでした。これは参考実装であり、唯一の正解ではありません。