型とリテラル
| 型 | 値の範囲・役割 | 変数・引数に使えるか |
|---|---|---|
i32 |
−2,147,483,648 ~ 2,147,483,647 | 使える |
i64 |
−9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 使える |
bool |
true または false |
使える |
() |
値を返さないブロック・関数の結果(unit) | 使えない |
整数は固定幅の符号付き整数です。bool と整数は別の型で、条件式には bool が必要です。if 1 { ... } のように整数を真偽値として扱うことはできません。
整数と真偽値は、代入や引数の受け渡しでコピーされます。
整数リテラル
Section titled “整数リテラル”10進数で書き、桁区切りに _ を使えます。型接尾辞は i32 と i64 です。
small = 42; // 型を決める文脈がなければ i32large = 3_000_000_000_i64;also_large = 3000000000i64;lowest: i32 = -2_147_483_648;print small, large, also_large, lowest;0xff、0b1010、浮動小数点リテラルは使えません。型の範囲を超えた整数リテラルはコンパイル時にエラーになります。
型推論の範囲
Section titled “型推論の範囲”型注釈、関数の引数型、演算の相手側などから、接尾辞のないリテラルの型を決めます。文脈がなければ i32 です。
fn twice(value: i64) -> i64 { value * 2}
total: i64 = 1;print total + 2, twice(3);この例の 1、2、3 は、それぞれの文脈から i64 になります。ただし、推論は局所的です。後続の文から前の変数定義の型を変更することはありません。
x = 1; // この時点で i32y: i64 = x; // エラー: x を暗黙に i64 へ変換しない複雑な右辺の内部まで先に調べて型を推論できない場合があります。たとえば次は、左の 1 が先に i32 と決まるためエラーです。
print 1 + { y: i64 = 2; y };型接尾辞や変数の型注釈で意図を明示してください。
print 1_i64 + { y: i64 = 2; y };i32 と i64 の暗黙変換、整数と bool の変換、as による明示的キャストは使えません。使いたい幅で最初から定義してください。
二項演算の両辺は原則として同じ型が必要です。例外はシフトです。i32 << i64 のように異なる整数幅を組み合わせられ、結果は左辺の型になります。演算子で詳しく説明します。