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

Макросы

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

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. В каждом вопросе верен только один вариант. После завершения вы увидите общий результат, результаты по 5 тематическим шкалам и подробные объяснения.
Вопрос 1 из 25
Как лучше всего описать гарантию механизма «Гигиена»?
Вопрос 2 из 25
Какой дефект способен воспроизвести тест `choose!`?
RustRust · Декларативные макросы macro_rules
macro_rules! choose { ($e:expr) => { "expr" }; ($i:ident) => { "ident" }; }
assert_eq!(choose!(name), "expr");
Вопрос 3 из 25
Какой вывод о механизме «Фрагменты» соответствует модели Rust?
Вопрос 4 из 25
Какое утверждение о «Тестирование и инструменты Cargo» остаётся верным при смене входных данных?
Вопрос 5 из 25
Какой эксплуатационный край отличает контракт «Декларативные макросы macro_rules» от удачного примера?
Вопрос 6 из 25
Какой результат даст этот фрагмент с `#[derive(MySerialize)]`?
RustRust · Процедурные макросы
#[derive(MySerialize)]
struct User { id: u64, name: String }
Вопрос 7 из 25
Что проверяет `macro_lib::vec_of_strings`, если не расширять вывод за пределы выполненного пути?
RustRust · Тестирование и инструменты Cargo
/// ```
/// use macro_lib::vec_of_strings;
/// let v = vec_of_strings![1, 2];
/// assert_eq!(v, ["1", "2"]);
/// ```
/// ```compile_fail
/// let _ = macro_lib::vec_of_strings![let x = 1];
/// ```
pub fn macro_docs() {}

# cargo test --doc
# cargo test --test exported_macros
Вопрос 8 из 25
Что должно войти в отрицательный тест механизма «Гигиена»?
Вопрос 9 из 25
Какую гарантию даёт `make_fn!`, а какую нужно проверять отдельно?
RustRust · Фрагменты
make_fn!(answer, { let x = 21; x * 2 });
assert_eq!(answer(), 42);
Вопрос 10 из 25
Какой вывод о механизме «Декларативные макросы macro_rules» соответствует модели Rust?
Вопрос 11 из 25
Какая часть механизма «Процедурные макросы» зафиксирована тестом `#[derive(MySerialize)]`?
RustRust · Процедурные макросы
#[derive(MySerialize)]
struct User { id: u64, name: String }

# cargo expand (внешний инструмент) показывает раскрытый код;
# cargo test проверяет его компиляцию и поведение.
Вопрос 12 из 25
Что может сломаться при другом размере входа или порядке действий в «Тестирование и инструменты Cargo»?
Вопрос 13 из 25
Как Rust выполнит этот фрагмент о механизме «Гигиена»?
RustRust · Гигиена
macro_rules! add_one {
    ($x:expr) => {{ let temp = $x; temp + 1 }};
}
let temp = 100;
let result = add_one!(temp);
Вопрос 14 из 25
Как обновить фрагмент с `add_one!`, чтобы ошибка исчезла по существу?
RustRust · Гигиена
macro_rules! add_one {
    ($x:expr) => {{ let temp = $x; temp + 1 }};
}
let temp = 100;
let result = add_one!(temp);
Вопрос 15 из 25
На какую часть контракта распространяется проверка `crate::helper`?
RustRust · Гигиена
#[macro_export]
macro_rules! call_helper { () => { $crate::helper() }; }
Вопрос 16 из 25
Что исправляет не симптом, а саму ошибку вокруг `macro_lib::vec_of_strings`?
RustRust · Тестирование и инструменты Cargo
/// ```
/// use macro_lib::vec_of_strings;
/// let v = vec_of_strings![1, 2];
/// assert_eq!(v, ["1", "2"]);
/// ```
/// ```compile_fail
/// let _ = macro_lib::vec_of_strings![let x = 1];
/// ```
pub fn macro_docs() {}
Вопрос 17 из 25
Какой путь выполнения выберет Rust после `to_string`?
RustRust · Декларативные макросы macro_rules
macro_rules! vec_of_strings {
    ($($x:expr),* $(,)?) => { vec![$($x.to_string()),*] };
}
let v = vec_of_strings![1, "two",];
Вопрос 18 из 25
Какой эксплуатационный край отличает контракт «Фрагменты» от удачного примера?
Вопрос 19 из 25
Что нужно пересмотреть в использовании `#[derive(MySerialize)]`, чтобы код стал корректным?
RustRust · Процедурные макросы
#[derive(MySerialize)]
struct User { id: u64, name: String }
Вопрос 20 из 25
Какое изменение входа способно поменять вывод о механизме «Процедурные макросы»?
Вопрос 21 из 25
Как изменить фрагмент с `to_string`, не перенося ошибку на время выполнения?
RustRust · Декларативные макросы macro_rules
macro_rules! vec_of_strings {
    ($($x:expr),* $(,)?) => { vec![$($x.to_string()),*] };
}
let v = vec_of_strings![1, "two",];
Вопрос 22 из 25
Какое ограничение языка определяет поведение «Процедурные макросы»?
Вопрос 23 из 25
Какую гарантию даёт `macro_lib::vec_of_strings`, а какую нужно проверять отдельно?
RustRust · Тестирование и инструменты Cargo
/// ```
/// use macro_lib::vec_of_strings;
/// let v = vec_of_strings![1, 2];
/// assert_eq!(v, ["1", "2"]);
/// ```
/// ```compile_fail
/// let _ = macro_lib::vec_of_strings![let x = 1];
/// ```
pub fn macro_docs() {}
Вопрос 24 из 25
Какая правка выдержит ревью контракта «Фрагменты»?
RustRust · Фрагменты
macro_rules! make_fn {
    ($name:ident, $body:expr) => { fn $name() -> i32 { $body } };
}
make_fn!(answer, 40 + 2);
Вопрос 25 из 25
Каков конечный результат операции `make_fn!`?
RustRust · Фрагменты
macro_rules! make_fn {
    ($name:ident, $body:expr) => { fn $name() -> i32 { $body } };
}
make_fn!(answer, 40 + 2);

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

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

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

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