💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. В каждом вопросе верен только один вариант. После завершения вы увидите общий результат, результаты по 4 тематическим шкалам и подробные объяснения.
Вопрос 7 из 20
Какая правка выдержит ревью контракта «Индексация Unicode»?
Rust Rust · Индексация Unicode Копировать
let text = String::from("Здравствуйте");
// let first = text[0];
println!("{}", text.chars().count());
Клонировать всю коллекцию перед `text`, не отделяя требуемый элемент, срез или заимствованный просмотр. Сигнатура при этом почти не меняется, однако исходное предусловие остаётся скрытым.
Индексировать String по байтовому номеру и считать, что один символ всегда занимает один байт. Сигнатура при этом почти не меняется, однако исходное предусловие остаётся скрытым.
Собирать промежуточную коллекцию на каждом шаге `text`, даже если задача допускает заимствование или ленивый проход. Сигнатура при этом почти не меняется, однако исходное предусловие остаётся скрытым.
Выбирать bytes() для байтов, chars() для Unicode scalar values и специализированную библиотеку для графем; срезы по индексам делать только по проверенным границам UTF-8.
Использовать числовой индекс как индекс элемента независимо от представления данные этого фрагмента и способа хранения данных. В результате `chars` считали бы безопасным и на путях, которых пример не выполняет.
Вопрос 20 из 20
Какая правка выдержит ревью контракта «Векторы Vec»?
Rust Rust · Векторы Vec Копировать
let mut v = vec![1, 2, 3];
let first = &v[0];
v.push(4);
println!("{first}");
Сохранить ссылку на элемент Vec и после каждого push восстанавливать её тем же индексом без повторного заимствования. Следовательно, для `push` не понадобилось бы явное предусловие.
Собирать промежуточную коллекцию на каждом шаге `vec`, даже если задача допускает заимствование или ленивый проход.
Клонировать всю коллекцию перед `vec`, не отделяя требуемый элемент, срез или заимствованный просмотр. Сигнатура при этом почти не меняется, однако исходное предусловие остаётся скрытым.
Преобразовать все строки в Vec<char> независимо от профиля операций и расхода памяти. Сигнатура при этом почти не меняется, однако исходное предусловие остаётся скрытым. По этой логике отдельная проверка `push` на другом входе считалась бы лишней.
Использовать first до push, сохранить копию элемента, либо перестроить порядок операций; резервирование ёмкости не является разрешением для borrow checker.