match | Rust by Example
このサイトでパターンマッチの練習していた時に範囲を表す記法で...を使うと警告が出ました
fn main() { let number = 13; println!("Tell me about {}", number); match number { // 単一の値とのマッチをチェック 1 => println!("One!"), // いくつかの値とのマッチをチェック 2 | 3 | 5 | 7 | 11 => println!("This is a prime"), // 特定の範囲の値とのマッチをチェック 13...19 => println!("A teen"), // その他の場合の処理 _ => println!("Ain't special"), } }
warning: `...` range patterns are deprecated help: use `..=` for an inclusive range
この例だと13...19は13から19までを表すのですが、13..19と少し違いがわかりづらいです。
13...19は19を含みますが
13..19は19を含みません。
なので19を含む場合は代わりに13..=19と表すことで=がついているので19が含むことが明示できるようになってます。
個人的には..=はとても見やすいなと思います。境界値はいつも含むか含まないか、不安になるのですが、これだと今後不安になることはなくなると思います。
議論されていた記事
`...` vs `..=` for inclusive ranges - ideas (deprecated) - Rust Internals
この記事に書いてありました。
for文での使用例
19を含まない例
for i in 13..19 { println!("{}", i); } // output 13 14 15 16 17 18
19を含む例
for i in 13..=19 { println!("{}", i); } // output 13 14 15 16 17 18 19
注意
...は非推奨ですがmatchの時のみ記述できます。
forの時で使用するとエラーが出ます。