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

Result и обработка ошибок

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

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. В каждом вопросе верен только один вариант. После завершения вы увидите общий результат, результаты по 4 тематическим шкалам и подробные объяснения.
Вопрос 1 из 20
Что важно понимать о механизме «Оператор распространения ошибки?», прежде чем менять код?
Вопрос 2 из 20
Какой дефект способен воспроизвести тест `first`?
RustRust · Оператор распространения ошибки ?
fn first(xs: &[i32]) -> Option<i32> { Some(*xs.first()?) }
assert_eq!(first(&[]), None);
Вопрос 3 из 20
Как поведёт себя программа при достижении `divide`?
RustRust · Ok и Err
fn divide(a: i32, b: i32) -> Result<i32, &'static str> {
    if b == 0 { Err("division by zero") } else { Ok(a / b) }
}
println!("{:?}", divide(8, 0));
Вопрос 4 из 20
Какой узкий вывод следует из проверки `LoadError::Invalid`?
RustRust · Собственные ошибки
let err = load("bad").unwrap_err();
assert!(matches!(err, LoadError::Invalid(_)));
Вопрос 5 из 20
Какой вариант правки возвращает фрагмент с `std::num::ParseIntError` к корректному контракту?
RustRust · Оператор распространения ошибки ?
use std::num::ParseIntError;
fn twice(s: &str) -> Result<i32, ParseIntError> {
    let n: i32 = s.parse()?;
    Ok(n * 2)
}
println!("{:?}", twice("x"));
Вопрос 6 из 20
Что исправить вокруг `std::num::ParseIntError`, чтобы граничный вход обрабатывался безопасно?
RustRust · Собственные ошибки
#[derive(Debug)]
enum LoadError { Empty, Invalid(std::num::ParseIntError) }
fn load(s: &str) -> Result<i32, LoadError> {
    if s.is_empty() { return Err(LoadError::Empty); }
    s.parse().map_err(LoadError::Invalid)
}
Вопрос 7 из 20
Как сформулировать контракт механизма «Ok и Err» без привязки к именам переменных?
Вопрос 8 из 20
Что проверяет `std::io::Error`, если не расширять вывод за пределы выполненного пути?
RustRust · Контекст причины
#[derive(Debug)]
struct ConfigError { path: String, source: std::io::Error }
// В тесте проверяют path и kind(), а не полный текст Display.
Вопрос 9 из 20
Какой граничный случай важнее всего учесть для механизма «Контекст причины»?
Вопрос 10 из 20
Какое изменение окружения может повлиять на вывод о «Собственные ошибки»?
Вопрос 11 из 20
Какой результат даст этот фрагмент с `std::num::ParseIntError`?
RustRust · Оператор распространения ошибки ?
use std::num::ParseIntError;
fn twice(s: &str) -> Result<i32, ParseIntError> {
    let n: i32 = s.parse()?;
    Ok(n * 2)
}
println!("{:?}", twice("x"));
Вопрос 12 из 20
Что нужно проверить отдельно при переносе механизма «Ok и Err» в библиотечный код?
Вопрос 13 из 20
К какому результату приводит последовательность вокруг `std::num::ParseIntError`?
RustRust · Собственные ошибки
#[derive(Debug)]
enum LoadError { Empty, Invalid(std::num::ParseIntError) }
fn load(s: &str) -> Result<i32, LoadError> {
    if s.is_empty() { return Err(LoadError::Empty); }
    s.parse().map_err(LoadError::Invalid)
}
Вопрос 14 из 20
Как исправить участок с `divide` без обхода проверки компилятора?
RustRust · Ok и Err
fn divide(a: i32, b: i32) -> Result<i32, &'static str> {
    if b == 0 { Err("division by zero") } else { Ok(a / b) }
}
println!("{:?}", divide(8, 0));
Вопрос 15 из 20
Какой эксплуатационный край отличает контракт «Оператор распространения ошибки?» от удачного примера?
Вопрос 16 из 20
На какое правило следует опираться при ревью кода по теме «Собственные ошибки»?
Вопрос 17 из 20
Что можно считать доказанным после успешного выполнения `is_err`?
RustRust · Ok и Err
let result: Result<i32, &str> = Err("bad");
assert!(result.is_err());
assert_eq!(result.err(), Some("bad"));
Вопрос 18 из 20
Какое изменение решает проблему в месте применения `io::Error`?
RustRust · Контекст причины
use std::{fs, io};
fn read_config(path: &str) -> Result<String, io::Error> {
    fs::read_to_string(path)
}
Вопрос 19 из 20
Какой принцип Rust объясняет обычный сценарий для «Контекст причины»?
Вопрос 20 из 20
Каков конечный результат операции `io::Error`?
RustRust · Контекст причины
use std::{fs, io};
fn read_config(path: &str) -> Result<String, io::Error> {
    fs::read_to_string(path)
}

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

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

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

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