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

Option и отсутствие значения

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

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. В каждом вопросе верен только один вариант. После завершения вы увидите общий результат, результаты по 4 тематическим шкалам и подробные объяснения.
Вопрос 1 из 20
Где заканчивается гарантия обычного сценария для «Безопасное извлечение»?
Вопрос 2 из 20
Какой результат даст фрагмент о механизме «Преобразование Option через map»?
RustRust · Преобразование Option через map
let value: Option<String> = None;
let len = value.map(|s| s.len());
println!("{len:?}");
Вопрос 3 из 20
Какой эксплуатационный край отличает контракт «Преобразование Option через map» от удачного примера?
Вопрос 4 из 20
Чем завершится выполнение фрагмента с `unwrap_or_else`?
RustRust · Безопасное извлечение
let configured: Option<u16> = None;
let port = configured.unwrap_or_else(|| 8080);
println!("{port}");
Вопрос 5 из 20
Какое изменение окружения может повлиять на вывод о «Some и None»?
Вопрос 6 из 20
Что исправляет не симптом, а саму ошибку вокруг `parse`?
RustRust · Последовательные вычисления and_then
fn parse_port(s: &str) -> Option<u16> { s.parse().ok() }
let result = Some("8080").and_then(parse_port);
println!("{result:?}");
Вопрос 7 из 20
Что показывает `String::from` применительно к механизму «Преобразование Option через map»?
RustRust · Преобразование Option через map
let value = Some(String::from("rust"));
let len = value.as_ref().map(|s| s.len());
assert_eq!(len, Some(4));
assert_eq!(value.as_deref(), Some("rust"));
Вопрос 8 из 20
К какому результату приводит последовательность вокруг `copied`?
RustRust · Some и None
fn find_even(xs: &[i32]) -> Option<i32> {
    xs.iter().copied().find(|n| n % 2 == 0)
}
println!("{:?}", find_even(&[1, 3, 5]));
Вопрос 9 из 20
Какое свойство закрепляет сценарий `size_of`?
RustRust · Some и None
use std::mem::size_of;
assert_eq!(size_of::<Option<&u8>>(), size_of::<&u8>());
Вопрос 10 из 20
Какая правка выдержит ревью контракта «Безопасное извлечение»?
RustRust · Безопасное извлечение
let configured: Option<u16> = None;
let port = configured.unwrap_or_else(|| 8080);
println!("{port}");
Вопрос 11 из 20
Какая правка устраняет первопричину проблемы в механизме «Преобразование Option через map»?
RustRust · Преобразование Option через map
let value: Option<String> = None;
let len = value.map(|s| s.len());
println!("{len:?}");
Вопрос 12 из 20
Что отделяет корректное применение «Some и None» от случайно работающего решения?
Вопрос 13 из 20
Чем завершится выполнение фрагмента с `parse`?
RustRust · Последовательные вычисления and_then
fn parse_port(s: &str) -> Option<u16> { s.parse().ok() }
let result = Some("8080").and_then(parse_port);
println!("{result:?}");
Вопрос 14 из 20
Что проверяет `String::from`, если не расширять вывод за пределы выполненного пути?
RustRust · Безопасное извлечение
let value = Some(String::from("ready"));
let text = value.as_deref().unwrap_or("fallback");
assert_eq!(text, "ready");
Вопрос 15 из 20
Какое утверждение о механизме «Безопасное извлечение» можно переносить на другие примеры?
Вопрос 16 из 20
Как правильно истолковать результат проверки механизма «Последовательные вычисления and_then»?
RustRust · Последовательные вычисления and_then
let nested = Some("x").map(|s| s.parse::<u32>().ok());
let flat = Some("x").and_then(|s| s.parse::<u32>().ok());
assert_eq!(nested, Some(None));
assert_eq!(flat, None);
Вопрос 17 из 20
Что отделяет корректное применение «Преобразование Option через map» от случайно работающего решения?
Вопрос 18 из 20
Что исправить вокруг `copied`, чтобы граничный вход обрабатывался безопасно?
RustRust · Some и None
fn find_even(xs: &[i32]) -> Option<i32> {
    xs.iter().copied().find(|n| n % 2 == 0)
}
println!("{:?}", find_even(&[1, 3, 5]));
Вопрос 19 из 20
Что важно понимать о механизме «Последовательные вычисления and_then», прежде чем менять код?
Вопрос 20 из 20
Какой край контракта «Последовательные вычисления and_then» чаще всего остаётся незамеченным?

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

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

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

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