RS Rust  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Лёгкий  · 

Перечисления и сопоставление

Разбирает перечисления с данными, шаблоны match, краткую обработку одного варианта и полноту разбора. Вопросы распределены между чтением кода, диагностикой компиляции, выбором исправления, граничными случаями и инженерными решениями. Базовый синтаксис соответствует Rust 2024 edition; задания не требуют nightly, если это прямо не сказано.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. В каждом вопросе верен только один вариант. После завершения вы увидите общий результат, результаты по 4 тематическим шкалам и подробные объяснения.
Вопрос 1 из 20
Какая правка выдержит ревью контракта «Перечисления enum»?
RustRust · Перечисления enum
enum Message { Text(String), Move { x: i32, y: i32 }, Quit }
let m = Message::Move { x: 2, y: 3 };
let total = match m { Message::Move { x, y } => x + y, _ => 0 };
println!("{total}");
Вопрос 2 из 20
Какой принцип Rust объясняет обычный сценарий для «Сопоставление match»?
Вопрос 3 из 20
Что мешает этому фрагменту скомпилироваться?
RustRust · Исчерпывающий разбор
enum Status { New, Running, Done }
fn label(s: Status) -> &'static str {
    match s {
        Status::New => "new",
        Status::Running => "running",
    }
}
Вопрос 4 из 20
Что важно понимать о механизме «Условное сопоставление if let», прежде чем менять код?
Вопрос 5 из 20
Какое изменение входа способно поменять вывод о механизме «Перечисления enum»?
Вопрос 6 из 20
Каков конечный результат операции `match`?
RustRust · Сопоставление match
let value = Some(4);
let text = match value {
    Some(n) if n % 2 == 0 => "even",
    Some(_) => "odd",
    None => "none",
};
println!("{text}");
Вопрос 7 из 20
Какой узкий вывод следует из проверки `#[non_exhaustive]`?
RustRust · Исчерпывающий разбор
#[non_exhaustive]
pub enum RemoteStatus { Ready, Busy }
// Во внешнем crate match обязан иметь wildcard-ветвь.
Вопрос 8 из 20
Что нужно проверить отдельно при переносе механизма «Сопоставление match» в библиотечный код?
Вопрос 9 из 20
Какое утверждение о механизме «Исчерпывающий разбор» можно переносить на другие примеры?
Вопрос 10 из 20
Какое свойство закрепляет сценарий `String::from`?
RustRust · Условное сопоставление if let
let value = Some(String::from("ok"));
if let Some(text) = value.as_ref() { assert_eq!(text, "ok"); }
assert!(value.is_some());
Вопрос 11 из 20
Что Rust гарантирует при корректном использовании «Перечисления enum»?
Вопрос 12 из 20
Каков конечный результат операции `Message::Move`?
RustRust · Перечисления enum
enum Message { Text(String), Move { x: i32, y: i32 }, Quit }
let m = Message::Move { x: 2, y: 3 };
let total = match m { Message::Move { x, y } => x + y, _ => 0 };
println!("{total}");
Вопрос 13 из 20
Как исправить контракт, нарушенный при использовании `match`?
RustRust · Сопоставление match
let value = Some(4);
let text = match value {
    Some(n) if n % 2 == 0 => "even",
    Some(_) => "odd",
    None => "none",
};
println!("{text}");
Вопрос 14 из 20
Что можно считать доказанным после успешного выполнения `match`?
RustRust · Сопоставление match
let x = Some(3);
let y = match x { Some(n) if n > 5 => n, Some(n) => n * 2, None => 0 };
assert_eq!(y, 6);
Вопрос 15 из 20
Что можно считать доказанным после успешного выполнения `size_of`?
RustRust · Перечисления enum
use std::mem::size_of;
enum State { Empty, Number(u64), Bytes([u8; 32]) }
println!("{}", size_of::<State>());
Вопрос 16 из 20
К какому результату приводит последовательность вокруг `String::from`?
RustRust · Условное сопоставление if let
let value = Some(String::from("ok"));
if let Some(text) = value {
    println!("{text}");
}
// println!("{value:?}");
Вопрос 17 из 20
Как привести работу с `String::from` в соответствие с правилами Rust?
RustRust · Условное сопоставление if let
let value = Some(String::from("ok"));
if let Some(text) = value {
    println!("{text}");
}
// println!("{value:?}");
Вопрос 18 из 20
Что нужно проверить отдельно при переносе механизма «Условное сопоставление if let» в библиотечный код?
Вопрос 19 из 20
Какая правка выдержит ревью контракта «Исчерпывающий разбор»?
RustRust · Исчерпывающий разбор
enum Status { New, Running, Done }
fn label(s: Status) -> &'static str {
    match s {
        Status::New => "new",
        Status::Running => "running",
    }
}
Вопрос 20 из 20
Какое изменение входа способно поменять вывод о механизме «Исчерпывающий разбор»?

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу