rust: match の arm 区切りコンマはなくてもよい場合がある
目次
最終更新日:2025/11/23
Rust の clap でコマンドをコピペで列挙していたのだが、
match の各アームをコンマで区切っていないのにエラーになっていないことに気付いた。
ChatGPT 氏に訊くと改行区切りだという。
エラーにならないならそれでよいのだが、理屈が分からないのは不安だし、 コンマを付けて良いならそっちの方が他のコードと統一できてありがたいのだ。
サンプルコードはだいたいコンマ区切り
特にこの辺のドキュメントにはそういったことは書かれていない。
こっちの文には「各アームは次のアームとカンマで区切られています(Each arm is separated from the next with a comma)」と書いてあった。 ただ、これはサンプルコードがそうなっているので現状を述べているだけかもしれない。
リファレンス
BNF かどうかわからないが説明ページがあった。
こういうことだよ・・・な?
- 最後の arm はコンマがあってもなくてもよい
- 途中の arm は、
- ブロックであればコンマがあってもなくてもよい
- ブロックでないならコンマは必須

言えることは、コンマを付けておけば間違いは無い、だ。
コンマを必須にしておいてもよいような気はするが、
そうすると JSON の最後の要素がコンマがあってはダメ、みたいなのと同じような面倒さが発生するのかもしれない。
おまけ
JSON の最後のコンマ処理を C言語でライブラリなど使わずに書くのが面倒で、
私は for 文の最初に「0回目 以外はコンマを付ける」みたいに書いていた。
しかし今思えば、どうせ strcat() などでつないでいたんだろうから
for 文の中では毎回コンマ付きで出力して、抜けたときに
1文字戻して \0 を書いておけば済んだんじゃなかろうか。
そんなどうでもよいことを思い出した。
writer: hiro99ma