Menu
Coddy logo textTech

Множественные возвращаемые значения

Часть раздела 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);
challenge icon

Задание

Легко

Создайте функцию с именем get_user_info, которая возвращает кортеж, содержащий имя пользователя, возраст и адрес электронной почты. Функция должна иметь следующую сигнатуру:

fn get_user_info() -> (String, i32, String)

Внутри функции создайте следующие переменные:

  • name: String, инициализированная значением "Bob"
  • age: i32, инициализированная значением 25
  • email: 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 и деструктурируйте возвращенный кортеж
    
    
    // Выведите значения
    
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Fundamentals