Rustの数値リテラルでアンダースコアを桁区切りとして使う
Rustでは、整数および浮動小数点数の数値リテラルの任意の位置にアンダースコア_
を挿入できる。
公式の説明は以下。
変数名におけるアンダースコアについては以下の記事を参照。
- 関連記事: Rustの変数名におけるアンダースコアの意味
数値リテラル内のアンダースコアの利用法
アンダースコアは可読性を上げるための桁区切りとして利用されることが多い。
let i = 100_000_000;
let i = 0b1000_0000;
let f = 0.123_456_789;
source: numeric_literals_underscore.rs
型指定のためのサフィックスを区切るために使われることもある。
let i = 100_i32;
let f = 0.123_f64;
source: numeric_literals_underscore.rs
アンダースコアを挿入できない場合
アンダースコアは連続していてもよいし、末尾にあってもよい。
let i = 10___0_______0___;
assert_eq!(i, 1000);
source: numeric_literals_underscore.rs
ただし、浮動小数点数の小数点の後ろには挿入できない。前はOK。
let f = 0_.123;
assert_eq!(f, 0.123);
source: numeric_literals_underscore.rs
また、先頭にアンダースコアを付けることもできない。この場合、変数として扱われる。
// let i = __100;
// error[E0425]: cannot find value `__100` in this scope
let __100 = "abc";
assert_eq!(__100, "abc");
source: numeric_literals_underscore.rs
なお、アンダースコアと数字だけの変数名は推奨されておらず、Clippyから警告される。
ちなみに、先頭にアンダースコアを付けた変数は、使用されない変数を表す。通常、定義されたあと一度も使われない変数があると、コンパイラにunused variable
として警告されるが、先頭にアンダースコアを付けると警告の対象外となる。
- 関連記事: Rustの変数名におけるアンダースコアの意味