Множественные возвращаемые значения
Часть раздела Fundamentals путешествия по Rust на Coddy — урок 52 из 75.
В Rust функция может возвращать несколько значений, используя кортеж в качестве возвращаемого типа. Кортеж — это группа различных значений, объединенных в одну единицу.
Например:
fn get_coordinates() -> (i32, i32) {
let x = 10;
let y = 20;
(x, y) // Возвращаем кортеж
}И вот как вызвать функцию:
let (x, y) = get_coordinates();
// Деструктурируем кортеж
// на отдельные переменные
println!("{}, {}", x, y);Вы можете возвращать столько значений, сколько вам нужно, добавляя больше элементов в кортеж. Например:
fn get_details() -> (String, i32, f64) {
let name = String::from("Alice");
let age = 30;
let score = 95.5;
(name, age, score)
// Возвращаем кортеж с тремя значениями
}А вот как вызвать функцию:
let (name, age, score) = get_details();
println!("{}, {}, {}", name, age, score);Задание
ЛегкоСоздайте функцию с именем get_user_info, которая возвращает кортеж, содержащий имя пользователя, возраст и адрес электронной почты. Функция должна иметь следующую сигнатуру:
fn get_user_info() -> (String, i32, String)Внутри функции создайте следующие переменные:
name:String, инициализированная значением "Bob"age:i32, инициализированная значением 25email:String, инициализированная значением "bob@example.com"
Верните эти три значения в виде кортежа.
В функции main вызовите get_user_info и деструктурируйте возвращенный кортеж в отдельные переменные с именами name, age и email. Затем выведите эти значения в консоль с помощью println! в следующем формате:
Name: [name], Age: [age], Email: [email]Шпаргалка
Функции могут возвращать несколько значений, используя кортежи в качестве возвращаемого типа:
fn get_coordinates() -> (i32, i32) {
let x = 10;
let y = 20;
(x, y) // Возвращаем кортеж
}Вызовите функцию и деструктурируйте кортеж в отдельные переменные:
let (x, y) = get_coordinates();
println!("{}, {}", x, y);Вы можете возвращать несколько значений разных типов:
fn get_details() -> (String, i32, f64) {
let name = String::from("Alice");
let age = 30;
let score = 95.5;
(name, age, score)
}let (name, age, score) = get_details();
println!("{}, {}, {}", name, age, score);Попробуйте сами
fn get_user_info() -> (String, i32, String) {
// Создайте переменные name, age и email здесь
// Верните кортеж
}
fn main() {
// Вызовите get_user_info и деструктурируйте возвращенный кортеж
// Выведите значения
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Fundamentals
4Операторы. Часть 1
Арифметические операторыОператор остатка от деленияАрифметические сокращенияОператоры сравненияСравнение строк7Основы ввода-вывода
Вывод в консольЧтение ввода пользователяПовторение — До 120Повторение — True или False5Операторы. Часть 2
Логические операторы. Часть 1Логические операторы. Часть 2Повторение — простая логикаЛогические операторы. Часть 38Приложение-калькулятор
Приветственное сообщениеПолучение чисел11Функции
Объявление функцийПараметры и аргументыВозвращаемые значенияМножественные возвращаемые значенияПовторение: функция SigmaПовторение: функция валидации3Переменные. Часть 2
Объявление типаСоглашения об именованииВывод типовПовторение: инициализация переменныхПриведение типов9Циклы
Цикл For по последовательностиЦикл WhileОператор BreakОператор ContinueВложенные циклыМетки цикловБесконечный циклПовторение — Динамический ввод