match
, if
, loop
и другие выражения, содержащие блоки {}
, обрабатываются компилятором Rust специально. Когда эти выражения встречаются как операторы выражения , то есть не как часть большего выражения, а тип выражения, содержащего блок, - ()
, у вас нет поставить ;
после него, чтобы отделить его от следующего оператора.
Это не относится к операторам выражения без блоков , которые всегда должны быть отделены от следующего оператора (если один существует) на ;
, даже если их тип ()
.
Поскольку это правило существует, обычно в Rust не ставится ;
после match
, if
, unsafe
и др. c. когда они используются только для побочных эффектов или после for
и while
циклов (которые всегда используются только для побочных эффектов, поскольку всегда возвращают ()
).
Тем не менее, Кажется, что и rustfmt, и Clippy устраивают дополнительные ;
, поэтому, если вы предпочитаете его там по эстетическим c причинам, вы вряд ли кого-нибудь обидите, используя его.