Встроенные типы Rust
Что вы узнаете: фундаментальные типы Rust (
i32,u64,f64,bool,char), вывод типов, явные аннотации типов и то, как они соотносятся с примитивными типами C/C++. Неявных преобразований нет — Rust требует явных приведений.
- В Rust есть вывод типов, но допускается и явное указание типа
| Описание | Тип | Пример |
|---|---|---|
| Знаковые целые | i8, i16, i32, i64, i128, isize | -1, 42, 1_00_000, 1_00_000i64 |
| Беззнаковые целые | u8, u16, u32, u64, u128, usize | 0, 42, 42u32, 42u64 |
| Числа с плавающей точкой | f32, f64 | 0.0, 0.42 |
| Unicode | char | ‘a’, ‘$’ |
| Логический | bool | true, false |
- Rust допускает произвольное использование
_между цифрами для удобства чтения
Указание типа и присваивание в Rust
- Для присваивания значений переменным в Rust используется ключевое слово
let. Тип переменной можно необязательно указать после:
fn main() {
let x : i32 = 42;
// Эти два присваивания логически эквивалентны
let y : u32 = 42;
let z = 42u32;
}
- Параметры функций и возвращаемые значения (если есть) требуют явного указания типа. Следующая функция принимает параметр u8 и возвращает u32
#![allow(unused)]
fn main() {
fn foo(x : u8) -> u32
{
return x as u32 * x as u32;
}
}
- Неиспользуемые переменные помечаются префиксом
_, чтобы не получать предупреждения компилятора
Указание типа и вывод типа в Rust
- Rust может автоматически вывести тип переменной из контекста.
- ▶ Попробуйте в Rust Playground
fn secret_of_life_u32(x : u32) {
println!("The u32 secret_of_life is {}", x);
}
fn secret_of_life_u8(x : u8) {
println!("The u8 secret_of_life is {}", x);
}
fn main() {
let a = 42; // Ключевое слово let присваивает значение; тип a — u32
let b = 42; // Ключевое слово let присваивает значение; выведенный тип b — u8
secret_of_life_u32(a);
secret_of_life_u8(b);
}
Переменные и изменяемость в Rust
- Переменные в Rust по умолчанию неизменяемые, если не использовано ключевое слово
mut, которое обозначает изменяемость переменной. Например, следующий код не скомпилируется, покаlet a = 42не будет заменено наlet mut a = 42
fn main() {
let a = 42; // Нужно заменить на let mut a = 42, чтобы разрешить присваивание ниже
a = 43; // Не скомпилируется, пока выше не внесено изменение
}
- Rust допускает повторное использование имён переменных (затенение, shadowing)
fn main() {
let a = 42;
{
let a = 43; //OK: Другая переменная с тем же именем
}
// a = 43; // Не допускается
let a = 43; // Ок: новая переменная и присваивание
}