RS Rust  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

Расширенная обработка ошибок

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

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. В каждом вопросе верен только один вариант. После завершения вы увидите общий результат, результаты по 5 тематическим шкалам и подробные объяснения.
Вопрос 1 из 25
Что ещё нужно проверить, прежде чем считать реализацию «Классификация ошибок» надёжной?
Вопрос 2 из 25
Как переписать код так, чтобы край контракта был виден в типе результата?
RustRust · Thiserror-подобные модели
#[derive(Debug)]
enum ConfigError {
    Io { path: std::path::PathBuf, source: std::io::Error },
    InvalidPort { value: String },
}
Вопрос 3 из 25
Какой результат следует из типов и порядка действий?
RustRust · Восстановление
fn load_or_default(path: &str) -> Result<String, std::io::Error> {
    match std::fs::read_to_string(path) {
        Ok(v) => Ok(v),
        Err(e) if e.kind() == std::io::ErrorKind::NotFound => Ok(String::new()),
        Err(e) => Err(e),
    }
}
Вопрос 4 из 25
Какой принцип Rust объясняет обычный сценарий для «Тестирование и инструменты Cargo»?
Вопрос 5 из 25
Какое изменение окружения может повлиять на вывод о «Восстановление»?
Вопрос 6 из 25
Какое правило Rust точнее всего описывает механизм «Классификация ошибок»?
Вопрос 7 из 25
Какая часть механизма «Классификация ошибок» зафиксирована тестом `std::io::ErrorKind`?
RustRust · Классификация ошибок
fn retryable(kind: std::io::ErrorKind) -> bool {
    matches!(kind, std::io::ErrorKind::Interrupted | std::io::ErrorKind::WouldBlock)
}
Вопрос 8 из 25
Что Rust гарантирует при корректном использовании «Восстановление»?
Вопрос 9 из 25
Почему типы, владение или доступы здесь несовместимы?
RustRust · Thiserror-подобные модели
#[derive(Debug)]
enum ConfigError {
    Io { path: std::path::PathBuf, source: std::io::Error },
    InvalidPort { value: String },
}
Вопрос 10 из 25
Какой эксплуатационный край отличает контракт «Тестирование и инструменты Cargo» от удачного примера?
Вопрос 11 из 25
На какую часть контракта распространяется проверка `std::env::temp_dir`?
RustRust · Восстановление
let temp = std::env::temp_dir().join("definitely_missing_config_1242");
let value = load_or_default(temp.to_str().unwrap()).unwrap();
assert!(value.is_empty());
Вопрос 12 из 25
Какая переделка сохраняет стоимость операции предсказуемой?
RustRust · Тестирование и инструменты Cargo
#[test]
fn preserves_error_category() {
    let e = std::fs::read_to_string("missing-file-for-test").unwrap_err();
    assert_eq!(e.kind(), std::io::ErrorKind::NotFound);
}
Вопрос 13 из 25
Какой узкий вывод следует из проверки `preserves_error_category`?
RustRust · Тестирование и инструменты Cargo
#[test]
fn preserves_error_category() {
    let e = std::fs::read_to_string("missing-file-for-test").unwrap_err();
    assert_eq!(e.kind(), std::io::ErrorKind::NotFound);
}
Вопрос 14 из 25
Какое объяснение механизма «Thiserror-подобные модели» не смешивает компиляцию и выполнение?
Вопрос 15 из 25
Как правильно прочитать результат диагностического сценария `std::error::Error`?
RustRust · anyhow-подобный контекст
fn load(path: &str) -> Result<String, Box<dyn std::error::Error + Send + Sync>> {
    Ok(std::fs::read_to_string(path)?)
}

# В журнал выводят полную цепочку причин, пользователю — краткое сообщение без секретов.
Вопрос 16 из 25
Как устранить проблему, не прибегая к утечке памяти или сырому указателю?
RustRust · Классификация ошибок
match error.kind() {
    std::io::ErrorKind::NotFound => create_default(),
    std::io::ErrorKind::PermissionDenied => return Err(error.into()),
    _ => return Err(error.into()),
}
Вопрос 17 из 25
Что можно считать доказанным после успешного выполнения `preserves_error_category`?
RustRust · Тестирование и инструменты Cargo
#[test]
fn preserves_error_category() {
    let e = std::fs::read_to_string("missing-file-for-test").unwrap_err();
    assert_eq!(e.kind(), std::io::ErrorKind::NotFound);
}

# cargo test preserves_error_category -- --exact
Вопрос 18 из 25
Что нужно проверить отдельно при переносе механизма «Thiserror-подобные модели» в библиотечный код?
Вопрос 19 из 25
Что ещё нужно проверить, прежде чем считать реализацию «anyhow-подобный контекст» надёжной?
Вопрос 20 из 25
Какой узкий вывод следует из проверки `ConfigError::Io`?
RustRust · Thiserror-подобные модели
fn kind(e: &ConfigError) -> &'static str {
    match e { ConfigError::Io { .. } => "io", ConfigError::InvalidPort { .. } => "input" }
}
Вопрос 21 из 25
Как изменятся значения к моменту завершения блока?
RustRust · Классификация ошибок
match error.kind() {
    std::io::ErrorKind::NotFound => create_default(),
    std::io::ErrorKind::PermissionDenied => return Err(error.into()),
    _ => return Err(error.into()),
}
Вопрос 22 из 25
Что изменить, чтобы ответственность за освобождение ресурса не дублировалась?
RustRust · anyhow-подобный контекст
fn load(path: &str) -> Result<String, Box<dyn std::error::Error + Send + Sync>> {
    Ok(std::fs::read_to_string(path)?)
}
Вопрос 23 из 25
Какое свойство «anyhow-подобный контекст» сохранится после небольшого рефакторинга?
Вопрос 24 из 25
Какое изменение делает ответственность за данные явной в этом фрагменте?
RustRust · Восстановление
fn load_or_default(path: &str) -> Result<String, std::io::Error> {
    match std::fs::read_to_string(path) {
        Ok(v) => Ok(v),
        Err(e) if e.kind() == std::io::ErrorKind::NotFound => Ok(String::new()),
        Err(e) => Err(e),
    }
}
Вопрос 25 из 25
Что произойдёт после операции `std::error::Error`?
RustRust · anyhow-подобный контекст
fn load(path: &str) -> Result<String, Box<dyn std::error::Error + Send + Sync>> {
    Ok(std::fs::read_to_string(path)?)
}

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

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

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

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