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

Итераторы и замыкания

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

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. В каждом вопросе верен только один вариант. После завершения вы увидите общий результат, результаты по 5 тематическим шкалам и подробные объяснения.
Вопрос 1 из 25
Какая реализация выражает механизм «Ленивость» без лишнего копирования?
RustRust · Ленивость
let mut calls = 0;
let iter = [1, 2, 3].iter().map(|n| { calls += 1; n * 2 });
println!("{calls}");
drop(iter);
Вопрос 2 из 25
Какое объяснение механизма «Адаптеры» не смешивает компиляцию и выполнение?
Вопрос 3 из 25
Где заканчивается гарантия обычного сценария для «Владение в closure»?
Вопрос 4 из 25
Что проверяет `Vec::new`, если не расширять вывод за пределы выполненного пути?
RustRust · Ленивость
let mut seen = Vec::new();
let first = [1, 2, 3].iter().inspect(|n| seen.push(**n)).find(|n| **n == 2);
assert_eq!(first, Some(&2));
assert_eq!(seen, vec![1, 2]);
Вопрос 5 из 25
Что нужно пересмотреть в использовании `iterator_is_lazy`, чтобы код стал корректным?
RustRust · Тестирование и инструменты Cargo
#[test]
fn iterator_is_lazy() {
    let calls = std::cell::Cell::new(0);
    let it = [1, 2].iter().map(|x| { calls.set(calls.get() + 1); x * 2 });
    assert_eq!(calls.get(), 0);
    assert_eq!(it.collect::<Vec<_>>(), vec![2, 4]);
    assert_eq!(calls.get(), 2);
}
Вопрос 6 из 25
Какая часть механизма «Итераторы Iterator» зафиксирована тестом `std::iter::FusedIterator`?
RustRust · Итераторы Iterator
use std::iter::FusedIterator;
fn require_fused<I: FusedIterator>(_it: I) {}
require_fused([1, 2].into_iter());
Вопрос 7 из 25
Какой способ правки делает использование `String::from` корректным и явным?
RustRust · Владение в closure
let text = String::from("hello");
let consume = move || text;
let value = consume();
// let again = consume();
Вопрос 8 из 25
На какую часть контракта распространяется проверка `iterator_is_lazy`?
RustRust · Тестирование и инструменты Cargo
#[test]
fn iterator_is_lazy() {
    let calls = std::cell::Cell::new(0);
    let it = [1, 2].iter().map(|x| { calls.set(calls.get() + 1); x * 2 });
    assert_eq!(calls.get(), 0);
    assert_eq!(it.collect::<Vec<_>>(), vec![2, 4]);
    assert_eq!(calls.get(), 2);
}
Вопрос 9 из 25
Какой край контракта «Адаптеры» чаще всего остаётся незамеченным?
Вопрос 10 из 25
Какая часть механизма «Адаптеры» зафиксирована тестом `copied`?
RustRust · Адаптеры
let out: Vec<_> = [1, 2, 3].iter().copied().map(|n| n + 1).collect();
assert_eq!(out, vec![2, 3, 4]);
Вопрос 11 из 25
Чем завершится выполнение фрагмента с `into_iter`?
RustRust · Итераторы Iterator
let mut it = vec![10, 20].into_iter();
println!("{:?} {:?} {:?}", it.next(), it.next(), it.next());
Вопрос 12 из 25
Какое ограничение языка определяет поведение «Ленивость»?
Вопрос 13 из 25
Как изменятся значения к моменту завершения фрагмента?
RustRust · Ленивость
let mut calls = 0;
let iter = [1, 2, 3].iter().map(|n| { calls += 1; n * 2 });
println!("{calls}");
drop(iter);
Вопрос 14 из 25
Что устанавливает сценарий `String::from` и где проходит граница его вывода?
RustRust · Владение в closure
let text = String::from("hi");
let len = move || text.len();
assert_eq!(len(), 2);
assert_eq!(len(), 2);
Вопрос 15 из 25
Какая правка выдержит ревью контракта «Адаптеры»?
RustRust · Адаптеры
let values = [1, 2, 3, 4];
let sum: i32 = values.iter().filter(|n| **n % 2 == 0).map(|n| n * 10).sum();
println!("{sum}");
Вопрос 16 из 25
Что нужно проверить отдельно при переносе механизма «Ленивость» в библиотечный код?
Вопрос 17 из 25
Как проявится механизм «Владение в closure» при выполнении кода?
RustRust · Владение в closure
let text = String::from("hello");
let consume = move || text;
let value = consume();
// let again = consume();
Вопрос 18 из 25
Что произойдёт с ресурсом после завершения показанной области?
RustRust · Адаптеры
let values = [1, 2, 3, 4];
let sum: i32 = values.iter().filter(|n| **n % 2 == 0).map(|n| n * 10).sum();
println!("{sum}");
Вопрос 19 из 25
Какой вывод допустим после запуска `iterator_is_lazy` и чего он не доказывает?
RustRust · Тестирование и инструменты Cargo
#[test]
fn iterator_is_lazy() {
    let calls = std::cell::Cell::new(0);
    let it = [1, 2].iter().map(|x| { calls.set(calls.get() + 1); x * 2 });
    assert_eq!(calls.get(), 0);
    assert_eq!(it.collect::<Vec<_>>(), vec![2, 4]);
    assert_eq!(calls.get(), 2);
}

# cargo test iterator_is_lazy -- --exact
Вопрос 20 из 25
На какое правило следует опираться при ревью кода по теме «Итераторы Iterator»?
Вопрос 21 из 25
Какой вывод о механизме «Тестирование и инструменты Cargo» соответствует модели Rust?
Вопрос 22 из 25
Какое изменение окружения может повлиять на вывод о «Тестирование и инструменты Cargo»?
Вопрос 23 из 25
Какой случай чаще всего обнаруживает скрытую ошибку в реализации «Итераторы Iterator»?
Вопрос 24 из 25
Что важно понимать о механизме «Владение в closure», прежде чем менять код?
Вопрос 25 из 25
Как устранить исходную ошибку, связанную с `into_iter`?
RustRust · Итераторы Iterator
let mut it = vec![10, 20].into_iter();
println!("{:?} {:?} {:?}", it.next(), it.next(), it.next());

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

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

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

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