Примитивы
Rust предоставляет доступ к большому количеству примитивов
:
Скалярные типы
- знаковые целочисленные:
i8
,i16
,i32
,i64
иisize
(размер указателя) - беззнаковые целочисленные:
u8
,u16
,u32
,u64
иusize
(размер указателя) - вещественные:
f32
,f64
char
скалярное значение Unicode, например:'a'
,'α'
и'∞'
(4 байта каждый)bool
:true
илиfalse
- единичный тип
()
, значение которого так же()
Несмотря на то, что значение единичного типа является кортежем, оно не считается составным типом, потому что не содержит нескольких значений.
Составные типы
- массивы, например
[1, 2, 3]
- кортежи, например
(1, true)
Переменные всегда должны быть аннотированы.
Числам можно указать определённый тип с помощью суффикса,
иначе будет присвоен тип по умолчанию.
Целочисленные значения по умолчанию i32
, а вещественные f64
.
Стоит заметить, что Rust также умеет выводить типы из контекста.
fn main() { // Переменные могут быть аннотированы. let logical: bool = true; let a_float: f64 = 1.0; // Обычная аннотация let an_integer = 5i32; // Суффиксная аннотация // Этим переменным будет присвоен тип по умолчанию. let default_float = 3.0; // `f64` let default_integer = 7; // `i32` // Тип также может быть выведен из контекста. let mut inferred_type = 12; // Тип i64 выводится из другой строки inferred_type = 4294967296i64; // Значение изменяемой переменной может быть изменено. let mut mutable = 12; // Изменяемое `i32` mutable = 21; // Ошибка! Тип переменной изменить нельзя. mutable = true; // Переменные могут быть переопределены с помощью затенения. let mutable = true; }