Это преобразует строку в указанный тип при условии, что для этого типа реализован типаж FromStr. Он реализован для множества типов стандартной библиотеки. Чтобы получить эту функциональность для пользовательского типа, надо просто реализовать для этого типа типаж FromStr.
fn main() {
let parsed: i32 = "5".parse().unwrap();
let turbo_parsed = "10".parse::<i32>().unwrap();
let sum = parsed + turbo_parsed;
println!("Сумма: {:?}", sum);
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Программы на языке Rust - это (в основном) набор последовательных операторов:
fn main() {
// оператор
// оператор
// оператор
}
Существует несколько типов операторов в Rust. Наиболее распространённые - оператор связывания и выражение, заканчивающееся ;:
fn main() {
// оператор связывания
let x = 5;
// оператор выражения
x;
x + 1;
15;
}
Блоки так же могут быть частью оператора выражения. Они используются в качестве r-values при присваивании. Последнее выражение в блоке будет присвоено l-value. Однако, если последнее выражение в блоке оканчивается точкой с запятой, в качестве значения будет возвращено ().
fn main() {
let x = 5u32;
let y = {
let x_squared = x * x;
let x_cube = x_squared * x;
// Результат этого выражение будет присвоен переменной `y`
x_cube + x_squared + x
};
let z = {
// Т.к это выражение оканчивается на `;`, переменной `z` будет присвоен `()`
2 * x;
};
println!("x равен {:?}", x);
println!("y равен {:?}", y);
println!("z равен {:?}", z);
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Неотъемлемой частью любого языка программирования является изменение потоков управления: if/else, for и другие. Давайте поговорим о них в языке Rust.
Ветвление с помощью if-else такое же, как и в других языка программирования. В отличие от многих других языков программирования, логические условия не должны быть заключены в круглые скобки и после каждого условия должен следовать блок. Условия if-else являются выражениями, и все ветки должны возвращать одинаковый тип данных.
fn main() {
let n = 5;
if n < 0 {
print!("{} — отрицательное", n);
} else if n > 0 {
print!("{} — положительное", n);
} else {
print!("{} — нуль", n);
}
let big_n =
if n < 10 && n > -10 {
println!(", малое по модулю число, умножим его в десять раз");
// Это выражение вернёт `i32`.
10 * n
} else {
println!(", большое по модулю число, уменьшим его вдвое");
// И это выражение вернёт `i32`.
n / 2
// ЗАДАНИЕ ^ Попробуйте отбросить значение, добавив точку с запятой.
};
// ^ Не забудьте добавить тут точку с запятой! Все операторы `let` требуют её..
println!("{} -> {}", n, big_n);
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה