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

Трейты

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

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. В каждом вопросе верен только один вариант. После завершения вы увидите общий результат, результаты по 5 тематическим шкалам и подробные объяснения.
Вопрос 1 из 25
Как следует интерпретировать результат проверки `line`?
RustRust · Определение trait
struct Post(String);
impl Summary for Post { fn title(&self) -> &str { &self.0 } }
let p = Post("News".into());
assert_eq!(p.line(), "— News");
Вопрос 2 из 25
Какая правка выдержит ревью контракта «Определение trait»?
RustRust · Определение trait
trait Summary {
    fn title(&self) -> &str;
    fn line(&self) -> String { format!("— {}", self.title()) }
}
Вопрос 3 из 25
Что нужно изменить вокруг `String::from`, чтобы устранить первопричину?
RustRust · Ограничения трейтов
fn duplicate<T: Clone>(value: &T) -> (T, T) {
    (value.clone(), value.clone())
}
let pair = duplicate(&String::from("x"));
Вопрос 4 из 25
На какое правило следует опираться при ревью кода по теме «Ограничения трейтов»?
Вопрос 5 из 25
Как лучше всего описать гарантию механизма «Методы по умолчанию»?
Вопрос 6 из 25
Какое свойство закрепляет сценарий `mathlib::square`?
RustRust · Тестирование и инструменты Cargo
/// Возвращает квадрат.
///
/// ```
/// assert_eq!(mathlib::square(4), 16);
/// ```
pub fn square(x: i32) -> i32 { x * x }
Вопрос 7 из 25
Как исправить участок с `render` без обхода проверки компилятора?
RustRust · Реализация
trait Render { fn render(&self) -> String; }
impl Render for String { fn render(&self) -> String { self.clone() } }
Вопрос 8 из 25
Какой путь выполнения выберет Rust после `String::from`?
RustRust · Ограничения трейтов
fn duplicate<T: Clone>(value: &T) -> (T, T) {
    (value.clone(), value.clone())
}
let pair = duplicate(&String::from("x"));
Вопрос 9 из 25
Какой риск остаётся после успешной компиляции кода по теме «Тестирование и инструменты Cargo» в контексте «Трейты»?
Вопрос 10 из 25
Какая часть механизма «Ограничения трейтов» зафиксирована тестом `std::fmt::Display`?
RustRust · Ограничения трейтов
fn show<T>(value: &T) -> String
where T: std::fmt::Display + ?Sized
{ value.to_string() }
assert_eq!(show::<str>("rust"), "rust");
Вопрос 11 из 25
Как изменится состояние программы после `name`?
RustRust · Методы по умолчанию
trait Named {
    fn name(&self) -> &str;
    fn describe(&self) -> String { format!("item {}", self.name()) }
}
struct User(String);
impl Named for User { fn name(&self) -> &str { &self.0 } }
Вопрос 12 из 25
Какой узкий вывод следует из проверки `mathlib::square`?
RustRust · Тестирование и инструменты Cargo
/// Возвращает квадрат.
///
/// ```
/// assert_eq!(mathlib::square(4), 16);
/// ```
pub fn square(x: i32) -> i32 { x * x }

# Cargo.toml: package name = "mathlib"
# cargo test --doc
Вопрос 13 из 25
Какой случай чаще всего обнаруживает скрытую ошибку в реализации «Ограничения трейтов»?
Вопрос 14 из 25
Какие значения останутся доступными после `title`?
RustRust · Определение trait
trait Summary {
    fn title(&self) -> &str;
    fn line(&self) -> String { format!("— {}", self.title()) }
}
Вопрос 15 из 25
Какое утверждение о механизме «Определение trait» можно переносить на другие примеры?
Вопрос 16 из 25
Какое утверждение о «Тестирование и инструменты Cargo» остаётся верным при смене входных данных в контексте «Трейты»?
Вопрос 17 из 25
Какой эксплуатационный край отличает контракт «Реализация» от удачного примера?
Вопрос 18 из 25
Какой эксплуатационный край отличает контракт «Определение trait» от удачного примера?
Вопрос 19 из 25
Как убрать скрытое предусловие вокруг `name`, сохранив исходный замысел?
RustRust · Методы по умолчанию
trait Named {
    fn name(&self) -> &str;
    fn describe(&self) -> String { format!("item {}", self.name()) }
}
struct User(String);
impl Named for User { fn name(&self) -> &str { &self.0 } }
Вопрос 20 из 25
Что показывает `A::value` применительно к механизму «Методы по умолчанию»?
RustRust · Методы по умолчанию
trait A { fn value(&self) -> i32 { 1 } }
trait B { fn value(&self) -> i32 { 2 } }
struct X;
impl A for X {}
impl B for X {}
assert_eq!(A::value(&X) + B::value(&X), 3);
Вопрос 21 из 25
Какая часть механизма «Реализация» зафиксирована тестом `std::fmt::Display`?
RustRust · Реализация
struct LocalString(String);
impl std::fmt::Display for LocalString {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { self.0.fmt(f) }
}
Вопрос 22 из 25
Как изменить фрагмент с `mathlib::square`, не перенося ошибку на время выполнения?
RustRust · Тестирование и инструменты Cargo
/// Возвращает квадрат.
///
/// ```
/// assert_eq!(mathlib::square(4), 16);
/// ```
pub fn square(x: i32) -> i32 { x * x }
Вопрос 23 из 25
Что должно войти в отрицательный тест механизма «Методы по умолчанию»?
Вопрос 24 из 25
Что Rust гарантирует при корректном использовании «Реализация»?
Вопрос 25 из 25
Какое состояние получится после всех действий с `render`?
RustRust · Реализация
trait Render { fn render(&self) -> String; }
impl Render for String { fn render(&self) -> String { self.clone() } }

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

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

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

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