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